2010-07-15 159 views
2

是否可以在不完全下載的情況下閱讀.ZIP文件的內容?在沒有完整下載的情況下閱讀zip文件

我正在構建一個爬行器,我寧願不必下載每個zip文件來索引它們的內容。

謝謝;

+0

應該只能讀取文件的標題和目錄。參考:http://en.wikipedia.org/wiki/ZIP_%28file_format%29#File_headers – 2010-07-15 17:54:10

+0

你是什麼意思「讀取內容」?你的意思只是壓縮文件的文件名列表? – 2010-07-15 17:54:35

+0

是的,我只需要文件名。內容本身與我無關。 – 2010-07-15 18:09:59

回答

5

棘手的部分是確定中央目錄的開始,它發生在文件末尾。由於每個條目具有相同的固定大小,因此可以從文件末尾開始進行一種二進制搜索。二進制搜索試圖猜測中央目錄中有多少條目。從一些合理的值N開始,並在末尾檢索文件的那一部分 - (N * sizeof(DirectoryEntry))。如果該文件位置不是以中央目錄條目簽名開始的,則N太大 - 一半重複,否則N太小,雙重並重復。與二分搜索一樣,該過程保持當前的上限和下限。當兩者相等時,你已經找到N的值,即條目數。

您點擊網絡服務器的次數最多爲16次,因爲不能超過64K個條目。

這是否比下載整個文件更有效率取決於文件大小。您可能在下載之前請求資源的大小,如果它小於給定的閾值,請下載整個資源。對於大型資源,如果閾值設置得較高,則請求多個偏移將更快,並且整體上對Web服務器徵稅更少。

HTTP/1.1允許下載資源的範圍。對於HTTP/1.0,您別無選擇,只能下載整個文件。

+0

這是一個非常整潔的想法。我不知道HTTP 1.1允許範圍.. – Earlz 2010-07-15 19:17:50

+0

@Earlz - HTTP/1。1資源範圍是下載和可中斷/可下載下載的支柱。請參閱http://www.ietf.org/rfc/rfc2068.txt中的14.36範圍 – mdma 2010-07-15 19:26:05

2

format表明關於文件內容的信息的關鍵部分駐留在結尾。然後將條目指定爲與特定條目的偏移量,因此您需要訪問我相信的所有內容。

GZip格式能夠被讀取爲我相信的流。

+0

是的,郵編頭在最後。您需要整個文件_或_一個下載程序,讓您獲得特定的部分。 – 2010-07-15 18:02:59

+1

GZip可以被讀作流,但它只是一個壓縮流。 gzip沒有任何類型的容器或多個文件,這就是爲什麼使用'.tar.gz':'.tar'合併文件和'.gz'壓縮它們的原因。 – 2010-07-15 18:04:28

+0

它更像是一個頁腳。 – gtrak 2010-07-15 18:05:04

1

我不知道這是否有幫助,因爲我不是程序員。但在Outlook中,您可以預覽zip文件並查看實際內容,而不僅僅是文件目錄(如果它們是可預覽的文檔,如PDF)。

0

在ArchView中實現了一個解決方案 「ArchView可以在線打開歸檔文件,無需下載整個歸檔。」 https://addons.mozilla.org/en-US/firefox/addon/5028/

在archview-0.7.1.xpi文件「archview.js」中可以看到他們的javascript方法。

+0

您是否也設法解決此問題? – 2010-08-06 19:23:23

相關問題