我們有一個內部Web應用程序,它接受來自用戶的各種格式的文件,以便將大量數據導入到我們的系統中。比較具有相同內容的XLSX文件之間的MD5哈希
我們實現的最新升級之一是添加一種方法來檢測文件是否先前已上傳,如果是,向用戶顯示警告和選項以重新提交文件或取消上傳。
爲了達到這個目的,我們正在計算上傳文件的MD5
,並將它與包含以前上傳的文件信息的數據庫表進行比較,以確定它是否是重複的。如果在MD5
上有匹配,則顯示警告,否則它將新的文件信息插入表中並繼續進行文件處理。
下面是用來生成MD5
哈希C#
代碼:
private static string GetHash(byte[] input)
{
using (MD5 md5 = MD5.Create())
{
byte[] data = md5.ComputeHash(input);
StringBuilder bob = new StringBuilder();
for (int i = 0; i < data.Length; i++)
bob.Append(data[i].ToString("x2").ToUpper());
return bob.ToString();
}
}
一切正常嗯...有一個例外。
允許用戶上傳.xlsx
文件進行此過程,不幸的是,此文件類型還將文件的元數據存儲在文件內容中。 (這可以很容易通過改變.xlsx
文件的擴展名的.zip
並提取內容可以看出[參見下文]。)
正因爲如此,該MD5
哈希.xlsx
文件將與改變每次後續保存,即使文件內容相同(只需打開並保存文件,不進行修改將刷新元數據並導致不同的散列)。
在這種情況下,具有相同記錄但在不同時間或由不同用戶創建的文件將滑過重複文件檢測並進行處理。
我的問題:有沒有辦法來確定是否.xlsx
文件的內容匹配是以前的文件沒有存儲文件的內容?換句話說:有沒有一種方法可以產生一個.xlsx
文件的內容的MD5
散列?
謝謝你 - 這是肯定的東西,我可以工作。我有點擔心潛在的開銷,但從我用過的少數測試案例來看,它似乎運作良好。 – Siyual