计算文件的 MD5,出现错误的结果
1. 运行环境
go 1.23
2. 问题描述?
func Md5File(filePath string, totalSize int64) (result string, err error) {
config.GVA_LOG.Info("Reading md5 of file", zap.Any("path", filePath))
var file *os.File
if file, err = os.Open(filePath); err != nil {
return
}
defer file.Close()
hash := md5.New()
var written int64
if written, err = io.Copy(hash, file); err != nil {
return
}
if written != totalSize {
err = errors.New(fmt.Sprintf("file size [%d] is not equal, should be %d ", written, totalSize))
return
}
return hex.EncodeToString(hash.Sum(nil)), nil
}
使用 md5sum 可以输入正确的 MD5 值
3. 您期望得到的结果?
- 正常输出 MD5 值
- 输出的 MD5 值正确
4. 您实际得到的结果?
- 正常输出 MD5 值
- 输出的 MD5 值不正确
计算文件需要把文件分块读取后写入到md5流里面,不能读取后就写入