是否可以只下载ZIP存档的一部分(例如一个文件)?

use*_*134 16 zip rar

我想知道有没有办法只下载.rar或.zip文件的一部分而不下载整个文件?有一个包含文件A,B,C和D的zip文件.我只需要A.我可以以某种方式调整下载以仅下载A或者如果可能的话,在服务器本身中提取文件并仅获取A?

Ada*_*dam 11

诀窍是做塞尔吉奥建议不用手动做的事情.如果您通过HTTP支持的虚拟文件系统挂载zip文件,然后在其上使用标准的unzip命令,这很容易.这样解压缩实用程序的I/O调用就会被转换为HTTP范围获取,这意味着只需要通过网络传输zip的块.

这是Linux使用HTTPFS的一个例子,HTTPFS是一个非常轻量级的虚拟文件系统(它使用FUSE).Windows也有类似的工具.

获取/构建httpfs:

$ wget http://sourceforge.net/projects/httpfs/files/httpfs/1.06.07.02
$ tar -xjf httpfs_1.06.07.10.tar.bz2 
$ rm httpfs
$ ./make_httpfs 
Run Code Online (Sandbox Code Playgroud)

挂载远程zip文件并从中提取一个文件:

$ mkdir mount_pt
$ sudo ./httpfs http://server.com/zipfile.zip mount_pt
$ sudo ls mount_pt 
zipfile.zip
$ sudo unzip -p mount_pt/zipfile.zip the_file_I_want.txt > the_file_I_want.txt
$ sudo umount mount_pt 
Run Code Online (Sandbox Code Playgroud)

当然,您也可以使用命令行旁边的任何其他工具.(我需要sudo,因为看起来FUSE在我的机器上就是这样设置的,你不应该需要它)

我知道这是一个老问题,这是其他人遇到这个问题.

  • 为什么使用“sudo”? (2认同)

Ser*_*sev 7

在某种程度上,是的,你可以.

ZIP文件格式说有一个"中央目录".基本上,这是一个表,用于存储归档中的文件以及它们具有的偏移量.

因此,使用Content-Range,您可以从末尾下载部分文件(中心目录是zip文件中的最后一项)并尝试识别其中的中心目录.如果您成功,那么您就知道文件列表和偏移量,因此您可以继续单独获取这些块并自行解压缩.

这种方法非常容易出错,无法保证正常工作.但一般的黑客行为也是如此:-)

另一种可能的方法是为此构建一个自定义服务器(有关更多详细信息,请参阅@ pst的答案).

  • 这不是黑客攻击,而是正确完成任务的方法。实际上,HTTP 这里只是访问 ZIP 流的一种方式,任何与流一起工作的 ZIP 组件都可以用来从远程流中提取一个文件。 (2认同)