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