2013-03-22 37 views
4

我正在使用HTML5文件API構建文件上傳器。我想確保沒有重複的文件上傳,根據他們包含的實際數據。這意味着即使兩個文件的名稱不同或者位於不同的文件夾中,也應將兩個文件視爲相同。在使用HTML5文件API上傳之前唯一標識文件

我已經考慮過使用md5計算散列,但是因爲這一切都必須在客戶端發生,所以使用javascript時,較大的文件將需要很長時間。當我說很大時,我的意思是高達5GB的視頻。

只是要清楚,這不必涉及校驗和,我只是想唯一識別文件。哈希可能是爲了這個目的的矯枉過正,但它是首先想到的。

更新:我想我需要一個輕量級的fingerprint算法。我發現Rabin作爲維基百科上的一個例子,但我不知道如何在JavaScript中實現這一點。

+3

好問題,但哈希是唯一想到的東西。如果沒有檢查每個字節,您無法檢查文件是否是唯一的,因此最終無法避免瀏覽整個文件。 – JJJ 2013-03-22 11:02:22

回答

1

沒有捷徑存在。如果您需要識別零歧義的重複文件,則必須閱讀並比較文件的全部內容。

但是,如果你能忍受某種程度的誤報,那麼你可能會採取一些策略。對於類似的問題,我計算給定文件塊子集的MD5哈希(使用預定義的不變窗口)。

+0

我也這麼想過,但我不確定最好的子集是什麼。您顯然希望避免文件的頁眉和頁腳。您是如何確定自己的子集以最大限度地減少誤報的機會的? – bramcordie 2013-03-22 11:14:30

+0

我擔心這最終將取決於文件的類型。可能發生的情況是,某些文件格式會存儲某種標識標籤,包括標頭或頁腳中的某種散列(我正在考慮mp3 id標籤f.ex.) – 2013-03-22 12:42:01

+0

對於我的使用情況,它有爲不同的媒體和文件類型工作。我能想到的最好方法是將字節偏移量的一個樣本偏移到文件大小的一半,減去樣本大小的一半。 – bramcordie 2013-03-22 13:42:27