代码如下
QHttpMultiPart mMultiPart(QHttpMultiPart::FormDataType);
QHttpPart filePart;
filePart.setBodyDevice(&file);//这里的file对象就是我们需要提交的文件,如果需要上传多个文件,我们就需要创建多个QHttpPart对象
filePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/jpeg"));//这里我们上传的是图片
filePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"screen\"; filename=\""+file.fileName()+"\""));//这里的name默认情况下file,如果服务器那边有特别指定就需要改成服务器指定的名字
QHttpPart dataPart;
dataPart.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("text/plain"));
dataPart.setHeader(QNetworkRequest::ContentDispositionHeader,QVariant("form-data; name=\"meta\"")); dataPart.setBody(data.toUtf8());
//上面这段代码就是添加你需要携带的参数,比如用户名,或者token之类的,每一个参数对应一个QHttpPart对象
mMultiPart.append(filePart);
mMultiPart.append(dataPart);
QUrl url("http://"+host+HttpPath+"report_screen");
QNetworkRequest request(url);
QNetworkAccessManager nam;
QNetworkReply* reply = nam.post(request,&mMultiPart);
//这里定义了QEventLoop 并且连接信号槽 用于阻塞,当然也可以直接通过信号槽实现异步接收消息
QEventLoop loop;
connect(reply,&QNetworkReply::finished,&loop,&QEventLoop::quit);
loop.exec();