只下载文件的一部分

r00*_*004 8 download files axel aria2

我试图找到是否可以通过axelaria2或任何其他可用工具下载文件的一部分(任何文件)。

例如有一个电影文件(因为在 A/V 文件中做这种事情是有意义的)。我怎么能只下载文件第一个的最后 50MB 或第三个 60Mb?

这些文件主要位于 HTTP 服务器上;但可以在 FTP 服务器上。如果可以通过其他协议下载它们,这也是一种选择。

Ste*_*n D 9

您是否可以下载文件的一部分取决于用于传输内容的协议。

如果文件可通过 HTTP/1.1 获得,那么任何正确支持 Range 标头(请参阅 RFC 2616 的第 14.35 节)的服务器都应该允许您下载文件的部分内容。

考虑以下文件:

$ cat testfile.txt
12345
Run Code Online (Sandbox Code Playgroud)

如果我使用支持 Range 标头的网络服务器 nginx 提供此服务,我可以下载其中的一部分(插入换行符以提高可读性):

$ curl --header "Range: bytes=2-3" https://localhost/testfile.txt -k
34
$ curl --header "Range: bytes=0-1" https://localhost/testfile.txt -k
12 
$ curl --header "Range: bytes=4-" https://localhost/testfile.txt -k
5
Run Code Online (Sandbox Code Playgroud)

这与 curl、wget 和其他 HTTP 客户端用来“恢复”中断传输的功能相同。

FTP 协议通过 RESTART (REST) 命令(参见 RFC 959 的第 4.1.3 节)提供在给定偏移量处恢复文件传输。使用与上面相同的 testfile.txt,由 FTP 提供:

$ touch testfile.txt
$ ftp localhost
Connected to localhost.
220 (vsFTPd 2.2.2)
Name (localhost:steve): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> rest 3
restarting at 3. execute get, put or append to initiate transfer
ftp> get testfile.txt
local: testfile.txt remote: testfile.txt
200 PORT command successful. Consider using PASV.
350 Restart position accepted (3).
150 Opening BINARY mode data connection for testfile.txt (6 bytes).
226 Transfer complete.
3 bytes received in 0.00 secs (19.1 kB/s)
ftp> 221 Goodbye.
$ cat testfile.txt
45
Run Code Online (Sandbox Code Playgroud)

我不熟悉许多 FTP 客户端,所以我不知道是否有这样做的,但是可能可以通过使用 REST 命令读取任何字节子集,然后在获得所需字节数后简单地停止.

似乎aria2能够使用该-c标志恢复 HTTP 和 FTP 传输。这可能会使用上述功能,因为它仅支持 HTTP 和 FTP。但是,它似乎本身并不支持仅下载文件的结尾或中间部分。可以--continue通过在磁盘上创建一个虚拟文件来利用该标志。如果这个文件有 N 个字节,那么 aria 可能会从文件的 N+1 个字节开始。