我使用QNetworkAccessManager进行
http下载。当URL = “
http://www.qq.com",的时候,下载的index.html网页可以打开,但是当URL = “
http://zz.onlinedown.net/down/laolafangkuaijin.rar"的时候,下载的是
laolafangkuaijin.rar这个文件包,但是只有1kb.原始文件是6M多。我是在VS2008上面开发的,以下是源码。请教各位大神是怎么回事?在线等,非常感谢。 头文件: #ifndef UPDATEMGR_H
#define UPDATEMGR_H
#include <QWidget>
#include <QObject>
#include <QNetworkAccessManager>
#include <QUrl>
#include <QMessageBox>
#include <QNetworkReply>
#include <QSslError>
#include <QAuthenticator>
#include <QFileInfo>
#include <QtNetwork> 
class UpdateMgr : public QObject{   
 Q_OBJECT
public:
 static UpdateMgr* getInstance();
 static void release(); 
 /************************************************************************
 下载新版本:
 0:下载失败;
 1:下载成功;
 2:下载被异常中断;
 ************************************************************************/
 int downNewVersion();
 /************************************************************************ 
安装新版本:
 0:安装失败;
 1:安装成功;
 2:安装被异常中断;
 ************************************************************************/
 int installNewProject();
 void startRequest(QUrl url);
 ~UpdateMgr();
private:
 UpdateMgr();
 static UpdateMgr* pThis;
 UpdateUi updateUi;
 QUrl url;
 QNetworkAccessManager manager;
 QNetworkReply *reply;
 QFile *file;
 int httpGetId;
 bool httpRequestAborted;
 bool isExistNew; 
private slots:
  void httpFinished();
 void httpReadyRead();
 void updateDataReadProgress(qint64 bytesRead, qint64 totalBytes); 
};
#endif // UPDATEMGR_H   
源文件: 
#include "UpdateMgr.h"
#include <QtGui>UpdateMgr* UpdateMgr::pThis = NULL;
UpdateMgr::UpdateMgr()
{
 isExistNew = false;
 file = NULL;
 reply = NULL;
}UpdateMgr::~UpdateMgr()
{
}UpdateMgr* UpdateMgr::getInstance()
{
 if(pThis == NULL){
  pThis = new UpdateMgr();
 }
 return pThis;
}
void UpdateMgr::release()
{
 if (pThis != NULL){
  delete pThis;
  pThis = NULL;
 }
} 
int UpdateMgr::downNewVersion()
{
  //URL通过本地配置文件获取,可以指定;  //url = QObject::tr("
http://www.qq.com"); 
  url = QObject::tr("
http://zz.onlinedown.net/down/laolafangkuaijin.rar"); 
  QFileInfo fileInfo(url.path());
  QString fileName = fileInfo.fileName();
  if (fileName.isEmpty())
   fileName = "index.html";
  file = new QFile(fileName);
  if (!file->open(QIODevice::WriteOnly)) {
   delete file;
   file = 0;
   return 0;
  }
  httpRequestAborted = false;
  isExistNew = true;
  startRequest(url);/** 这是我定义的一个
显示下载进度的UI,可以忽略
  updateUi.setUp();
  updateUi.exec();
  **/ 
 return 1;
}
int UpdateMgr::installNewProject()
{
 return 0;
}void UpdateMgr::startRequest(QUrl url)
{
 reply = manager.get(QNetworkRequest(url));
 QObject::connect(reply,SIGNAL(finished()),this,SLOT(httpFinished()));      //下载完成后;
 QObject::connect(reply,SIGNAL(readyRead()),this,SLOT(httpReadyRead()));      //有可用
数据时;
 QObject::connect(reply,SIGNAL(downloadProgress(qint64,qint64)),
  this,SLOT(updateDataReadProgress(qint64,qint64))); //更新进度条;
}
void UpdateMgr::httpReadyRead()
{
 if (file){
  file->write(reply->readAll());
 }
}void UpdateMgr::updateDataReadProgress(qint64 bytesRead, qint64 totalBytes)
{
 if(isExistNew){
  updateUi.setProgressBarValues(bytesRead,totalBytes);
 }
}
void UpdateMgr::httpFinished()
{
 if(isExistNew){
  updateUi.setButtonStatus(true);
 }
 if (httpRequestAborted) {
         if (file) {
             file->close();
             file->remove();
             delete file;
             file = 0;
         }
         reply->deleteLater();
         //progressDialog->hide();
         return;
     }     //progressDialog->hide();
     file->flush();
     file->close();
     QVariant redirectionTarget = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
     if (reply->error()) {
         file->remove();
     } reply->deleteLater();
 reply = NULL;
 delete file;
 file = NULL;
}