当用户使用r.FormFile("file")上传文件时,您将获得multipart.File,multipart.FileHeader和错误.
我的问题是如何获取有关上传文件的信息,例如,它的大小,如果它是一个图像,它是demensions,依此类推.
我真的不知道从哪里开始所以任何帮助都会很棒.
可以从返回的文件名和MIME类型中获取multipart.FileHeader.
大多数元数据将取决于文件类型.如果它是一个形象,你应该能够使用的DecodeConfig功能,在标准库,PNG,JPEG和GIF,获得尺寸(和颜色模型).
有许多Go库可用于其他文件类型,它们具有类似的功能.
编辑:golang-nuts邮件组有一个很好的例子.
要获取文件大小和MIME类型:
// Size constants
const (
MB = 1 << 20
)
type Sizer interface {
Size() int64
}
func Sample(w http.ResponseWriter, r *http.Request) error {
if err := r.ParseMultipartForm(5 * MB); err != nil {
return err
}
// Limit upload size
r.Body = http.MaxBytesReader(w, r.Body, 5*MB) // 5 Mb
//
file, multipartFileHeader, err := r.FormFile("file")
// Create a buffer to store the header of the file in
fileHeader := make([]byte, 512)
// Copy the headers into the FileHeader buffer
if _, err := file.Read(fileHeader); err != nil {
return err
}
// set position back to start.
if _, err := file.Seek(0, 0); err != nil {
return err
}
log.Printf("Name: %#v\n", multipartFileHeader.Filename)
log.Printf("Size: %#v\n", file.(Sizer).Size())
log.Printf("MIME: %#v\n", http.DetectContentType(fileHeader))
}
Run Code Online (Sandbox Code Playgroud)
样本输出:
2016/12/01 15:00:06 Name: "logo_35x30_black.png"
2016/12/01 15:00:06 Size: 18674
2016/12/01 15:00:06 MIME: "image/png"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12425 次 |
| 最近记录: |