2010-07-15 164 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

相关问题