关于http:ParseMultipartForm()在ErrNotMultipart时返回nil

ParseMultipartForm() returning nil when ErrNotMultipart

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

为什么在ErrNotMultipart时返回零?

1
2
3
4
5
6
mr, err := r.multipartReader()
767     if err == ErrNotMultipart {
768         return nil
769     } else if err != nil {
770         return err
771     }

在我的情况下,我的标头中有一个错字

1
multipart/form-data, boundary=xxxx

上面的内容应使用分号而不是逗号。现在,我已经追踪了几个小时,因为我认为ParseMultipartForm成功地处理了数据。

从代码的angular来看,将其强制为零可能是有充分理由的。

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


我认为您一开始就正确地写了golang-nuts而不是在这里。

这确实看起来像是个错误,因此应在问题跟踪器或
在golang坚果上。请注意,golang-nuts是经过审核的,因此您的帖子不会出现
立即(这可能发生在您身上)。

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

1
2
3
4
5
6
7
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年开始的,可以找到特定代码行的评论
这里。测试似乎并未涵盖此特定的解析错误。评价
甚至说:

On 2011/04/28 00:08:40, bradfitz wrote:
I think you'll always return an error here for multipart forms. See comment
above.

已修复。

除此错误外,几乎所有错误均已完成。因此,正如我所说,我认为这是一个错误。