golang http post获取上传文件信息

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

 

posted @ 2019-08-07 17:07  _DongGe  阅读(3306)  评论(0编辑  收藏  举报