断点续传 curl_easy_setopt CURLOPT_RANGE

本文探讨了在使用HTTP范围请求进行文件下载时遇到的问题,特别是当文件写入方式设置为追加时,如何正确处理已下载部分与总大小的关系。当本地缓存大小等于总大小时,不正确的范围请求会导致额外的数据追加。关键在于理解‘X-Y’格式的范围请求,其中X是起始位置,Y是排除在外的终点。解决方案在于确保在X-Y中正确设置当前已下载的文件位置。
摘要由CSDN通过智能技术生成
示例:
stringstream ss;
string srange;
long long llCurrentSize;
long long llTotalSize;

ss << llCurrentSize;
ss << "-";
ss << llTotalSize;

srange >> srange;

curl_easy_setopt(m_hCurl,CURLOPT_RANGE,srange.c_str());

注:CURLOPT_RANGE : 传递一个你想指定的范围。它应该是”X-Y”格式,X或Y是被除外的。HTTP传送同样支持几个间隔,用逗句来分隔(X-Y,N-M)。

踩坑点:

        *文件写入方式为 追加 _wfopen_s(&m_pFile, strFilePath.c_str(), L"ab+");

        *假设本地缓存文件大小为 llCurrentSize = 100M,等于需要下载的文件的总大小(llTotalSize)。

        实际开发中遇到,当传入的llCurrentSize = llTotalSize时,导致该接口接着本地缓存文件又往文件末尾追加了100M的文件

        当传入的llCurrentSize < llTotalSize时,则不会出现此问题。

        *它应该是”X-Y”格式,X或Y是被除外的。(需要细品这句话)

        https://github.com/bagder/everything-curl/blob/master/libcurl-http/ranges.md#http-ranges

        

参考:https://www.cnblogs.com/chang290/archive/2012/08/12/2634858.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值