QT断点续传
来源:互联网 发布:jenkins linux 安装 编辑:程序博客网 时间:2024/05/20 00:38
//功能: 根据一个URL地址将数据保存到指定路径下,支持断点续传
//参数: url --需要访问的URL地址
// SavePath --需要保存的路径
//DownedSize 已经下载的大小
// totalSize 文件总大小
//返回值: ture --成功 false --失败
bool HttpGet::DownFile(const QUrl &url,const QString &SavePath,int DownedSize,int totalSize)
{ //创建父文件夹
QString curPath=QApplication::applicationDirPath()+"/Files";
if(!QDir(curPath).exists())
{
QDir photoDir;
photoDir.mkdir(curPath);
}
//创建子文件夹
if(!QDir(SavePath).exists())
{
QDir photoDir;
photoDir.mkdir(SavePath);
}
QNetworkRequest qheader;
qheader.setUrl(url);
QString Range="bytes "+QString::number(DownedSize)+"-";//告诉服务器从DownedSize起开始传输
qheader.setRawHeader("Range",Range.toAscii());
QNetworkAccessManager manager;
//参考 http://www.qtforum.org/article/31355/qnetworkaccessmanager-using-custom-headers-to-download-a-file.html
QEventLoop loop;
//QNetworkReply *reply = manager.get(QNetworkRequest(url));
QNetworkReply *reply = manager.get(QNetworkRequest(qheader));
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
QFileInfo fileInfo=url.path();
QFile file(SavePath+fileInfo.fileName());
file.open(QIODevice::WriteOnly);
file.write(reply->readAll());
delete reply;
return true;
}
使用
getter.DownFile(QUrl(FileUrl),QString(CurrentPath),0,FileSize);
QObject::connect(&getter, SIGNAL(finished()), SLOT(quit()));
断点续传原理:需要在HTTP请求的header中添加Rang节,告诉服务器从文件的那个位置开始传输.格式为bytes 开始传输的位置-
- QT断点续传
- qt 断点续传例子
- QT 断点续传问题
- Qt 断点续传功能
- Qt断点续传(暂停下载任务)
- 【大话QT之十】实现FTP断点续传
- qt使用http下载文件(断点续传)
- 断点续传
- 断点续传
- 断点续传
- 断点续传
- 断点续传
- 断点续传
- 断点续传
- 断点续传
- 断点续传
- 断点续传
- 断点续传
- 使用axis和axis2调用webservice
- 技术转载:游戏里实现碰撞检测方法
- JavaScript 变量的生存期
- 跨平台的emacs vim配置
- 【转载】Java 理论与实践: 正确使用 Volatile 变量
- QT断点续传
- java线程中断
- VC++练习之 组合框和列表框同步
- 循环
- 第一份实习工作感想
- Wordpress中设置管理菜单显示非显示的插件:WPlite
- C#综合揭秘——细说多线程(上)
- Berkele DB安装
- java.lang.OutOfMemoryError: PermGen space及其解决方法