(二)操作libcurl实现获取目的文件大小, 下载进度显示, 断点续传

各位亲 有时间可以去看看我的  “金骏家居淘宝店” http://jinjun1688.taobao.com/shop/view_shop.htm?tracelog=twddp 买时说明在我的博客看到有优惠哦 还有意外礼品赠送  真正的程序员淘宝店


本节jwisp为大家举例分析假设操作上节引见的函数和参数,在操作libcurl程中,如何获取下载目的文件大小 , 下载度条,断点续传等, 这些基本的函数,将为jwisp在最后解决下载程异样中缀等效果提供反对.

1.      编写失去下载目的文件大小的函数

long getDownloadFileLenth(const char *url){

     long downloadFileLenth = 0;

     CURL *handle = curl_easy_init();

curl_easy_setopt(handle, CURLOPT_URL, url);

curl_easy_setopt(handle, CURLOPT_HEADER, 1);    //只要求header头

curl_easy_setopt(handle, CURLOPT_NOBODY, 1);    //不需求body

if (curl_easy_perform(handle) == CURLE_OK) {

curl_easy_getinfo(handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &downloadFileLenth);

} else {

       downloadFileLenth = -1;

}

return downloadFileLenth;

}

2.      下载中回调本身写的失去下载度值的函数

下载回调函数的原型应该为:

int progressFunc(const char* flag, double dtotal, double dnow, double ultotal, double ulnow);

a.      应该在内部申明一个长途下载文件大小的全局变量

double downloadFileLenth = 0;

为了断点续传, 还应该申明一个当地文件大小的全局变量

double localFileLenth = 0;

b.      编写一个失去度值的函数getProgressValue()

int getProgressValue(const char* flag, double dt, double dn, double ult, double uln){

     double showTotal, showNow;

     if (downloadFileLenth == 0){

            downloadFileLenth = getDownloadFileLenth(url);

}

showTotal = downloadFileLenth;

     if (localFileLenth == 0){

            localFileLenth = getLocalFileLenth(filePath);

}

showNow = localFileLenth + dn;

//而后就可能调用你本身的进度显示函数了,这里假定已经有一个进度函数, 那么只要求传递当前下载值和总下载值即可.

showProgressValue(showNow, showTotal);

}

c.       在下载中停止三个下载参数的设置

curl_easy_setopt(handle, CURLOPT_NOPROGRESS, 0);

curl_easy_setopt(handle, CURLOPT_PROGRESSFUNCTION, getProgressValue);  //设置回调的进度函数

curl_easy_setopt(handle, CURLOPT_PROGRESSDATA, “flag”);   //此设置对应上面的const char *flag

3.      断点续传

libcurl实现断点续传很简略,只用两步即可实现, 一是要失去当地文件已下载的大小,通过函数getLocalFileLenth()方法来失去,二是设置CURLOPT_RESUME_FROM_LARGE参数的值为已下载当地文件大小.

失去当地文件大小的函数:

     long getLocalFileLenth(const char* localPath);

               设置下载点如下即可:

                     curl_easy_setopt(handle, CURLOPT_RESUME_FROM_LARGE, getLocalFileLenth(localFile));      

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值