由于Beego中的ParseFormOrMulitForm
功能,我收到了错误:
处理程序因错误http:multipart由ParseMultipartForm
处理而崩溃
Beego使用input.go中的Request.ParseMultipartForm
函数。
// ParseFormOrMulitForm parseForm or parseMultiForm based on Content-type
func (input *BeegoInput) ParseFormOrMulitForm(maxMemory int64) error {
// Parse the body depending on the content type.
if strings.Contains(input.Header("Content-Type"), "multipart/form-data") {
if err := input.Context.Request.ParseMultipartForm(maxMemory); err != nil {
return errors.New("Error parsing request body:" + err.Error())
}
} else if err := input.Context.Request.ParseForm(); err != nil {
return errors.New("Error parsing request body:" + err.Error())
}
return nil
}
但是,我发现Go不建议使用Request.ParseMultipartForm
进行流处理。
https://golang.org/src/net/http/request.go:
使用MultipartReader函数代替ParseMultipartForm将请求正文作为流处理。
362 // MultipartReader returns a MIME multipart reader if this is a
363 // multipart/form-data POST request, else returns nil and an error.
364 // Use this function instead of ParseMultipartForm to
365 // process the request body as a stream.
366 func (r *Request) MultipartReader() (*multipart.Reader, error) {
367 if r.MultipartForm == multipartByReader {
368 return nil, errors.New("http: MultipartReader called twice")
369 }
370 if r.MultipartForm != nil {
371 return nil, errors.New("http: multipart handled by ParseMultipartForm")
372 }
373 r.MultipartForm = multipartByReader
374 return r.multipartReader()
375 }
376
如何解决?