Qt通过post方式向服务器提交带参数的文件

代码如下

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();
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个 C++ Qt 实现 HTTP POST 请求的示例代码: ```cpp #include <QNetworkAccessManager> #include <QNetworkRequest> #include <QNetworkReply> #include <QUrlQuery> #include <QDebug> void postFileToServer(const QString& filePath, const QUrl& serverUrl) { QNetworkAccessManager* manager = new QNetworkAccessManager(); QNetworkRequest request(serverUrl); // 设置请求request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); // 读取文件内容 QFile file(filePath); if (!file.open(QIODevice::ReadOnly)) { qDebug() << "Failed to open file: " << filePath; return; } QByteArray fileData = file.readAll(); file.close(); // 构建请求参数 QUrlQuery params; params.addQueryItem("file_name", QFileInfo(file).fileName()); params.addQueryItem("file_data", QString(fileData.toBase64())); // 发送 POST 请求 QNetworkReply* reply = manager->post(request, params.toString(QUrl::FullyEncoded).toUtf8()); QObject::connect(reply, &QNetworkReply::finished, [reply]() { if (reply->error() == QNetworkReply::NoError) { qDebug() << "File uploaded successfully!"; } else { qDebug() << "Failed to upload file: " << reply->errorString(); } reply->deleteLater(); }); } ``` 该代码使用 Qt 的网络库实现了一个 HTTP POST 请求,将指定文件上传到指定的服务器。其中,`postFileToServer()` 函数接受两个参数,分别是文件路径和服务器 URL。函数内部使用 `QNetworkAccessManager` 类来发送网络请求,其中 POST 请求参数使用 `QUrlQuery` 类进行构建。如果请求成功,函数会打印一条提示信息;否则,会打印错误信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值