/* strUrl:下載圖片時需要的url strFilePath:下載圖片的位置(/home/XXX/YYY.png) */ void ThorPromote::downloadFileFromUrl(QString strUrl, QString strFilePath) { qDebug() << strUrl << " " << strFilePath; QFile file; file.setFileName(strFilePath); if(file.open(QIODevice::WriteOnly)) { QByteArray byte = webhelper::InitGetRequest(strUrl, "downImgFromUrl"); file.write(byte); file.close(); } } //get QByteArray webhelper::InitGetRequest(QString url, QString obj) { //循環拼接 QString baseUrl =url; //構造請求 QNetworkRequest request; request.setUrl(QUrl(baseUrl)); QNetworkAccessManager *manager = new QNetworkAccessManager(); // 發送請求 QNetworkReply *pReplay = manager->get(request); //開啟一個局部的事件循環,等待響應結束,退出 QEventLoop eventLoop; QObject::connect(pReplay,SIGNAL(finished()), &eventLoop, SLOT(quit())); //add timeout deal QTimer *tmpTimer = new QTimer(); connect(tmpTimer,SIGNAL(timeout()),&eventLoop, SLOT(quit())); tmpTimer->setSingleShot(true); tmpTimer->start(5000); eventLoop.exec(); tmpTimer->stop(); if (pReplay->error() == QNetworkReply::NoError) { qInfo() << QString("request %1 NoError").arg(obj); } else { qWarning()<<QString("request %1 handle errors here").arg(obj); QVariant statusCodeV = pReplay->attribute(QNetworkRequest::HttpStatusCodeAttribute); //statusCodeV是HTTP服務器的相應碼,reply->error()是Qt定義的錯誤碼,可以參考QT的文檔 qWarning()<<QString("request %1 found error ....code: %2 %3").arg(obj).arg(statusCodeV.toInt()).arg((int)pReplay->error()); qWarning(qPrintable(pReplay->errorString())); } //獲取響應信息 QByteArray bytes = pReplay->readAll(); return bytes; }