您的位置:首页 > 编程语言 > Qt开发

QT 下载文件

2015-05-28 19:52 537 查看
qt 利用http下载文件:

这里 介绍的是简单的 qt访问接口 http请求下载方法,没有进度条的,刚接触qt,方法大部分都是网上借鉴来的。如有雷同,纯属巧合。

这里实现的是 请求一个http 实现文件下载:

头文件定义:

QFile *avatorFile;//文件指针
QNetworkReply *avatorReply;
QNetworkAccessManager *avatorManager;
void httpDowload();
void httpDowloadFinished();


//下载文件之前先在本地创建一个文件 
QDir file;//文件夹
QString fileStr=QString("text/%1/").arg(text);
QString fileName=fileStr+"text.jpg";
//判断文件夹是否存在 不存在创建
if(!file.exists(fileStr)){
   file.mkpath(fileStr);
}
avatorFile=new QFile(fileName);
//判断文件是否可写入 不可写删除 指针赋值0
if(!avatorFile->open(QIODevice::WriteOnly)){
   delete avatorFile;
   avatorFile=0;
   return;
}


//开始请求 下载文件
QUrl  serviceUrl = QUrl("http://www.baidu.com");
avatorManager = new QNetworkAccessManager(this);                                
//get方式请求 如需加密用post
avatorReply=avatorManager->get(QNetworkRequest(serviceUrl));
            connect(avatorReply,SIGNAL(readyRead()),this,SLOT(httpDowload()));//数据写入
    connect(avatorReply,SIGNAL(finished()),this,SLOT(httpDowloadFinished()));//请求完成


//将下载的文件数据写入到文件指针中
void HttpProvider::httpDowload(){
    if(avatorFile){
         avatorFile->write(avatorReply->readAll());
    }
}


//请求完成 文件下载成功 
void HttpProvider::httpDowloadClientFinished(){
    //刷新文件
    avatorFile->flush();
    avatorFile->close();
    avatorFile=0;
}


这里在做下载时 实际情况中 发现一个问题 就是完成以后 一定要记得 flush close 文件指针 否则 文件始终是0KB,但是 我在做下载时 遇到过虽然没有 close但是 关闭程序后 文件自动刷新 两个文件 一个可以 一个不可以 他们的区别就是 size 这里引发猜想是不是文件 偏大的可以自己实现刷新缓存,纠结了一上午,哪位大神知道 可以指点指点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: