2

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 是发布这个问题的更好工具)

4

1 回答 1

2

我认为你一开始就写信给 golang-nuts 而不是在这里。

这确实看起来像一个错误,因此应该在问题跟踪器golangnuts中讨论。请注意,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 年开始的,可以在 此处找到对特定代码行的审查。测试似乎没有涵盖这个特定的解析错误。评论甚至说:

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

固定的。

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

于 2013-09-05T07:40:06.320 回答