http - 当 ErrNotMultipart 时 ParseMultipartForm() 返回 nil

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

最佳答案

我认为你一开始写信给 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 wrote: I think you'll always return an error here for multipart forms. See comment above.

已修复。

除了这个错误之外,几乎所有错误都已执行此操作。所以,正如我所说,我认为这是一个错误。

关于http - 当 ErrNotMultipart 时 ParseMultipartForm() 返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18628009/

相关文章:

database - 如果过滤器不返回任何内容,如何插入文档,否则用go替换mongodb中找到的文档?

go - 将http响应设置为空白标识符是否会导致文件处理程序泄漏?

http - 使用具有相同值的重复响应 header 可以吗?

python - 如何为 HTTP header 编码 UTF8 文件名? (Python,Django)

javascript - 使用JavaScript从客户端浏览器上传到Google Cloud Storage

Controller 参数的 Spring 注释包装器

json - 在 REST 服务中使用 PATCH 和 RFC 6902 从数组中删除对象。你怎么知道你正在删除正确的元素?

mysql - 如何为 Golang 格式化 MySql CREATE USER 语句

http - 使用 http.ListenAndServe 的 Golang 端口阻塞(?)

go - rpc方法的定时器实现