To get the file size and MIME type:
// 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)) }
Output Example:
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"
source share