是否可以在不完全下载的情况下读取.ZIP文件的内容?
我正在构建一个抓取工具,而不是只需要下载每个zip文件来索引其内容。
感谢;
答案 0 :(得分:5)
棘手的部分是识别中心目录的开头,该目录发生在文件的末尾。由于每个条目都是相同的固定大小,因此您可以从文件末尾开始进行一种二进制搜索。二进制搜索试图猜测中心目录中有多少条目。从一些合理的值N开始,并在end-(N * sizeof(DirectoryEntry))检索文件的那一部分。如果该文件位置不以中心目录条目签名开头,则N太大 - 一半重复,否则,N太小,双重并重复。与二进制搜索一样,该过程保持当前的上限和下限。当两者相等时,您已找到N的值,即条目数。
您点击网络服务器的次数最多为16次,因为不超过64K条目。
这是否比下载整个文件更有效取决于文件大小。您可以在下载之前请求资源的大小,如果它小于给定的阈值,请下载整个资源。对于大型资源,如果阈值设置为高,请求多个偏移将更快,并且对网络服务器的总体负担更少。
HTTP / 1.1允许下载资源范围。对于HTTP / 1.0,您别无选择,只能下载整个文件。
答案 1 :(得分:2)
format表明关于文件中的内容的关键信息位于其末尾。然后将条目指定为该特定条目的偏移量,因此您需要访问我认为的全部内容。
GZip格式能够被视为我认为的流。
答案 2 :(得分:1)
我不知道这是否有帮助,因为我不是程序员。但在Outlook中,您可以预览zip文件并查看实际内容,而不仅仅是文件目录(如果它们是可预览的文档,如pdf)。
答案 3 :(得分:0)
ArchView中实现了一个解决方案 “ArchView可以在线打开存档文件而无需下载整个存档。” https://addons.mozilla.org/en-US/firefox/addon/5028/
在“archview.js”文件的archview-0.7.1.xpi中,您可以查看他们的javascript方法。