How to get md5 from multipart.File

huangapple go评论84阅读模式
英文:

How to get md5 from multipart.File

问题

在Go语言中,获取*multipart.File的MD5的正确方法是什么?

以下是我的代码,它返回了错误的MD5值:

// GetFileMd5 计算文件的MD5值
// 返回MD5字符串
func GetFileMd5(file multipart.File) (md5Str string) {
    h := md5.New()
    if _, err := file.Seek(0, 0); err != nil {
        log.Error("获取文件MD5错误:%v", err)
    }
    if _, err := io.Copy(h, file); err != nil {
        log.Error("获取文件MD5错误:%v", err)
    }
    md5Str = hex.EncodeToString(h.Sum(nil))
    log.Debug("文件的MD5值为:%s", md5Str)
    return md5Str
}

以上是获取*multipart.File的MD5的正确方法。

英文:

In Go, what is the right way to get the md5 of *multipart.File?

Here is my code which retuened the wrong md5:

// GetFileMd5 count file's md5
// return md5 string
func GetFileMd5(file multipart.File) (md5Str string) {
	h := md5.New()
	if _, err := file.Seek(0, 0); err != nil {
		log.Error("Get file md5 error: %v", err)
	}
	if _, err := io.Copy(h, file); err != nil {
		log.Error("Get file md5 error: %v", err)
	}
	md5Str = hex.EncodeToString(h.Sum(nil))
	log.Debug("File md5 is: %s", md5Str)
	return md5Str
}

答案1

得分: 0

你的代码看起来没问题,但是请检查一下你是如何接收和存储文件的。如果你将它们存储在内存中,那么就不应该调用 Seek 方法。

如果你想要计算上传文件的哈希值,并同时将其保存到本地或上传到云端,你可以使用 MultiWriter

英文:

Your code looks ok, but check, how you receive and store files. If you store them in memory, then you shouldn't call Seek method.

If you want to calculate hash of uploaded file and in the same time save it locally or upload to the cloud, then you can use MultiWriter.

huangapple
  • 本文由 发表于 2017年6月21日 13:59:12
  • 转载请务必保留本文链接:https://go.coder-hub.com/44667906.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定