【发布时间】:2016-10-08 20:17:41
【问题描述】:
我需要阅读一个多部分的表单文件。我将自定义 req obj 传递给处理函数而不是 http.request 对象,我使用的是 Gorilla Mux。
处理程序签名是这样的:
func handlerFunc(w http.ResponseWriter, cR *custReqObj)
我是这样访问它的:
fileHeaders := cR.MultipartForm.File["file"]
fileHeader := fileHeaders[0]
fileName := fileHeader.Filename
file, err := fileHeader.Open()
由于我没有请求对象,我不能这样做:
request.FormFile["file"]
我浏览过http.FormFile,它也返回了第一个文件头。
if r.MultipartForm != nil && r.MultipartForm.File != nil {
if fhs := r.MultipartForm.File[key]; len(fhs) > 0 {
f, err := fhs[0].Open()
return f, fhs[0], err
}
}
我的方法是否正确?在哪些情况下我需要考虑多个文件头? 如果您能阐明什么是文件头以及多部分包在 golang 中的工作原理,我将不胜感激。
【问题讨论】:
-
你如何定义
custReqObj?我认为您需要在自定义请求中嵌入/包含Request对象,以便您可以使用http.Request中定义的方法。如the doc 中所述,Request.FormFile仅返回第一个文件。如果你有多个文件或多个部分,你应该使用Request.MultipartReader读取每个部分,然后调用Part.FileName或Part.FormName访问相应的数据。
标签: go multipartform-data multipart