2017-06-21 57 views
0

在Go中,獲取* multipart.File的md5的正確方法是什麼?如何從multipart獲取md5文件

這裏是我的代碼retuened錯了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 
} 
+0

你的代碼看起來不錯,你怎麼會錯誤的MD5?在你的代碼中,只需'return'就足夠了,你可以刪除變量名。 – jeevatkm

+0

嗨@jeevatkm,如果我將multipart.File更改爲File,並刪除file.Seek(0,0),它將返回正確的md5。所以我很困惑,如果我使用方法Seek正確。你說得對,這個函數中的變量名可以省略。 –

+0

其實你也可以去掉Seek呼叫。如果您從請求中獲取文件,將它傳遞給此方法,它將始終爲零。 – jeevatkm

回答

0

您的代碼看起來不錯,但檢查,你怎麼接收和存儲的文件。如果將它們存儲在內存中,則不應調用Seek方法。

如果要計算上傳文件的哈希值,並同時將其保存到本地或上傳到雲,則可以使用MultiWriter