【问题标题】:ParseMultipartForm() returning nil when ErrNotMultipart当 ErrNotMultipart 时 ParseMultipartForm() 返回 nil
【发布时间】:2013-09-05 15:40:06
【问题描述】:

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

【问题讨论】:

    标签: http go


    【解决方案1】:

    我认为你一开始就写信给 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。测试似乎没有涵盖这个特定的解析错误。评价 甚至说:

    在 2011/04/28 00:08:40,bradfitz 写道: 我认为您总是会在此处为多部分表单返回错误。见评论 以上。

    固定。

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

    【讨论】:

      猜你喜欢
      • 2013-04-21
      • 1970-01-01
      • 1970-01-01
      • 2016-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      • 1970-01-01
      相关资源
      最近更新 更多