主要是获取上传文件的内容、大小、名称以及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)