Per ottenere la dimensione del file e MIME tipo:
// 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))
}
Esempio di output:
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"
fonte
2016-12-01 23:03:04
Grazie per questo, soprattutto quello che stavo cercando. Come faresti a scoprire la dimensione (kb, mb saggio) del file, mantenendo il file live per un uso successivo? – user81779
Nel post 'golang-nuts' collegato, l'esempio usa la funzione' ioutil.ReadAll' che è davvero una funzione di convenienza. Per un maggiore controllo si usa la funzione 'io.ReadFull' che restituisce il numero di byte letti. Vedi http://golang.org/pkg/io/ioutil/#ReadAll e http://golang.org/pkg/io/#ReadFull – Intermernet