O fato de você poder ou não baixar uma parte de um arquivo depende do protocolo usado para transferir o conteúdo.
Se os arquivos estiverem disponíveis em HTTP / 1.1, qualquer servidor que suporte corretamente o cabeçalho Range (consulte a seção 14.35 do RFC 2616) deverá permitir o download de partes do arquivo.
Considere o seguinte arquivo:
$ cat testfile.txt
12345
Se eu servir isso com o nginx, um servidor que suporta o cabeçalho Range, eu posso baixar partes dele (novas linhas inseridas para legibilidade):
$ 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
Este é o mesmo recurso que curl, wget e outros clientes HTTP usam para "retomar" transferências interrompidas.
O protocolo FTP fornece a continuação de uma transferência de arquivo em um determinado deslocamento por meio do comando RESTART (REST) (consulte a seção 4.1.3 do RFC 959). Usando o mesmo testfile.txt acima, servido pelo 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
Eu não estou familiarizado com muitos clientes FTP, então não sei se alguém faz isso, mas provavelmente seria possível ler qualquer subconjunto de bytes usando o comando REST e, em seguida, simplesmente parando assim que você tiver o número de bytes que você quer.
Parece que aria2
é capaz de retomar as transferências HTTP e FTP com o sinalizador -c
. Isso provavelmente usa os recursos acima, pois é suportado apenas por HTTP e FTP. No entanto, ele não parece oferecer suporte nativo ao download apenas do segmento final ou médio de um arquivo. Pode ser possível explorar o sinalizador --continue
criando um arquivo fictício no disco. Se este arquivo tivesse N bytes, talvez a ária fosse iniciada no byte N + 1 do arquivo.