Мне нужно прочитать файл с несколькими файлами. Я передаю пользовательский req obj функции обработчика, а не объект http.request, я использую Gorilla Mux. Handler Подпись что-то вроде этого:
Загрузка многопользовательского файла: как обрабатывать FileHeaders
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'. Как указано в [doc] (https://golang.org/pkg/net/http/#Request.FormFile), 'Request.FormFile' возвращает только первый файл. Если у вас несколько файлов или несколько разделов, вы должны использовать ['Request.MultipartReader'] (https://golang.org/pkg/net/http/#Request.MultipartReader) для чтения каждой части, а затем вызвать' Part.FileName 'или' Part.FormName' для доступа к соответствующим данным. – putu