断点续传大致分了三个步骤。
1、寻找文件已经下载到的指针位置。
long FileLocate(char* path)
{
FILE *fp; long last;
if((fp=fopen(path,"ab+"))==NULL)
{
printf("can not open %s\n",path);
return 0;
}
else
{
fseek(fp,0L,SEEK_END);
last=ftell(fp);
fclose(fp);
return last;
}
}
这里唯一要注意的就是打开方式,不要用wb打开,这样会清空前面已经下载好的数据,而且下载完成后文件的大小是正确的,但是文件数据前端就会丢失掉。
2、将文件下载的位置传输到header里面。
header里面有这个参数Range,通过设置这个参数可以让服务器给你返回你文件指定位置的数据
Range:bytes=512000-
这个意思就是从 512000这个位置开始下载。
服务器正常返回的状态码再此时就应该是:206
还有就是把你要下载的文件的指针位置设置成要传输的位置,然后就开始准备下了。
3、从服务器返回的body里面读取数据,将读出来的数据写入到续传的那个文件中就可以了。