一 、 上传文件
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();
}