主要是獲取上傳文件的內容、大小、名稱以及md5內容加密和sha256內容加密,網上查找的資料很少,花費了挺長時間,記錄以備后用
//FormFileInfo 上傳文件的信息 type FormFileInfo struct { HashMd5 string `json:"hashMd5"` FileSize int64 `json:"fileSize"` FileName string `json:"fileName"` Sha256 string `json:"sha256"` Content []byte `json:"content"` } //GetFormFile 獲取上傳文件信息 func GetFormFile(b *bytes.Buffer, form *multipart.Form, w *multipart.Writer) (FormFileInfo, error) { var res FormFileInfo for name, files := range form.File { for k, file := range files { if k == 0 { f, err := file.Open() if err != nil { logging.Error(err) return res, err } fileConent, err := ioutil.ReadAll(f) if err != nil { logging.Error(err) return res, err } res.Content = fileConent defer f.Close() fw, err := w.CreateFormFile(name, file.Filename) if err != nil { logging.Error(err) return res, err } if _, err = io.Copy(fw, f); err != nil { logging.Error(err) return res, err } res.FileName = file.Filename res.FileSize = file.Size hash := md5.New() hash.Write(fileConent) res.HashMd5 = base64.StdEncoding.EncodeToString(hash.Sum(nil)) sh := sha256.New() sh.Write(fileConent) res.Sha256 = hex.EncodeToString(sh.Sum(nil)) } } } w.Close() //要關閉,會將w.w.boundary刷寫到w.writer中 return res, nil }
調用方式
var b bytes.Buffer w := multipart.NewWriter(&b) c.Request.ParseMultipartForm(2 << 20) multiPartForm, _ := c.MultipartForm() fileInfo, err := GetFormFile(&b, multiPartForm, w) fmt.Println(fileInfo)