当ErrNotMultipart时,ParseMultipartForm()返回nil

时间:2013-09-05 04:53:07

标签: http go

http://golang.org/src/pkg/net/http/request.go

为什么ErrNotMultipart会返回nil?

mr, err := r.multipartReader()
767     if err == ErrNotMultipart {
768         return nil 
769     } else if err != nil {
770         return err
771     }

在我的情况下,我的标题中有一个拼写错误

multipart/form-data, boundary=xxxx

上面应该有一个分号而不是逗号。现在,我正在追踪这几个小时,因为我认为ParseMultipartForm成功处理了数据。

从代码判断,可能有一个强有力的理由说它被迫为零。

(我在golang-nuts组发布了同样的问题,但是当我向第一个合作者发布回复时,我的回复未成功发布。所以,我认为stackoverflow是发布此问题的更好工具)

1 个答案:

答案 0 :(得分:2)

我认为你首先写的是golang-nuts而不是在这里。

这确实看起来像一个错误,因此应该在issue tracker或。{ 在golang nuts。请注意,golang-nuts会受到审核,因此您的帖子不会显示 马上(可能发生在你身上)。

作为一种解决方法,您可以使用Request.MultipartReader并自行阅读 (从ParseMultipartForm复制):

mr, err := r.multipartReader() // don't forget to handle err
f, err := mr.ReadForm(maxMemory) // don't forget to handle err

for k, v := range f.Value {
    r.Form[k] = append(r.Form[k], v...)
}
r.MultipartForm = f

从我可以从代码历史中推断出来的情况来看,这被忽略了。该 更改来自2011,可以找到特定代码行的审核 here。测试似乎没有涵盖这个特定的解析错误。评价 甚至说:

  
    

On 2011/04/28 00:08:40,bradfitz写道:     我认为你总是会在这里为多部分表单返回一个错误。见评论     上方。

  
     

固定。

几乎所有错误都是这样做的,但是这个错误。所以,正如我所说,我认为这是一个错误。