我想知道有没有办法只下载.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在我的机器上就是这样设置的,你不应该需要它)
我知道这是一个老问题,这是其他人遇到这个问题.
在某种程度上,是的,你可以.
ZIP文件格式说有一个"中央目录".基本上,这是一个表,用于存储归档中的文件以及它们具有的偏移量.
因此,使用Content-Range,您可以从末尾下载部分文件(中心目录是zip文件中的最后一项)并尝试识别其中的中心目录.如果您成功,那么您就知道文件列表和偏移量,因此您可以继续单独获取这些块并自行解压缩.
这种方法非常容易出错,无法保证正常工作.但一般的黑客行为也是如此:-)
另一种可能的方法是为此构建一个自定义服务器(有关更多详细信息,请参阅@ pst的答案).
| 归档时间: |
|
| 查看次数: |
16204 次 |
| 最近记录: |