shixingya |
2017-12-15 08:45 |
Qt HTTP上传文件/下载文件
一 、 上传文件 QString url_ ="http://172.24.25.34:8288/storage/uploadImage"; QString uploadFilename="D:/12121.png";
QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
QHttpPart textPart; textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"watermark\"")); textPart.setBody("my text"); multiPart->append(textPart);
QHttpPart imagePart; QFile *file = new QFile(uploadFilename); file->open(QIODevice::ReadOnly); imagePart.setBodyDevice(file); imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"filename\"; filename=\"12121.png\""));
multiPart->append(imagePart);
QUrl url(url_); QNetworkRequest request(url);
QNetworkAccessManager *networkManager= new QNetworkAccessManager; QNetworkReply *_reply = networkManager->post(request, multiPart); multiPart->setParent(_reply); // delete the multiPart with the reply
QEventLoop loop; connect(_reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(upLoadError(QNetworkReply::NetworkError))); connect(_reply, SIGNAL(uploadProgress ( qint64 ,qint64 )), this, SLOT( OnUploadProgress(qint64 ,qint64 ))); connect(_reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
loop.exec();
//获取http状态码 int http_code_ = _reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); // 获取数据 if (QNetworkReply::NoError == _reply->error()) { QByteArray context_ = _reply->readAll(); QJsonObject result_obj = QJsonDocument::fromJson(context_).object(); int code = result_obj.value("code").toInt(); qDebug()<<"code === "<<code<<result_obj; }
二、 下载文件
void downloadFile(QString url, QString localPath) { if(nullptr==file) file=new QFile(); file->setFileName(localPath); //判断文件是否存在 if(file->exists()){ qDebug()<<"文件已存在"; }else{ qDebug()<<"文件不存在"; } //已读写方式打开文件, //如果文件不存在会自动创建文件 if(!file->open(QIODevice::ReadWrite)){ qDebug()<<"打开失败"; }else{ qDebug()<<"打开成功"; } if (!file) return;
const QUrl newUrl = QUrl::fromUserInput(url); QNetworkAccessManager *accessManager = new QNetworkAccessManager(this); accessManager->setNetworkAccessible(QNetworkAccessManager::Accessible);
reply= (*accessManager).get(QNetworkRequest(newUrl)); connect(reply, SIGNAL(downloadProgress(qint64 ,qint64)), this, SIGNAL(updataProgress(qint64,qint64)),Qt::AutoConnection); connect(accessManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
connect(reply, &QIODevice::readyRead, this, &TaskRunner::readContent); _thread=new QThread; this->moveToThread(_thread); _thread->start(); }
|
|