展示一个c++ qt http post文件到服务器的代码
时间: 2024-05-07 07:16:13 浏览: 197
以下是一个 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` 类进行构建。如果请求成功,函数会打印一条提示信息;否则,会打印错误信息。
阅读全文