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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM