我试图创建一个上传图片的函数,并且函数在下面的表单中工作,但与我期望的不同。
bool ImgurUploader::upload( QImage image )
{
QByteArray byteArray;
QBuffer buffer(&byteArray);
image.save(&buffer, "PNG");
QByteArray params;
params.append(byteArray.toBase64());
QNetworkRequest request;
request.setUrl(QUrl("https://api.imgur.com/3/image"));
request.setRawHeader("Content-Type", "application/application/x-www-form-urlencoded");
request.setRawHeader("Authorization", "Client-ID 16d41e28a3ba71e");
mAccessManager->post(request, params);
}
我期待并首先尝试以这样的形式传递图像参数:
params.append("image=");
params.append(byteArray.toBase64());
但是当我这样做时,我得到了一个" 400 Bad Request"错误是"无效的网址"。
我如何发送几个参数?我使用了错误的方法吗?
答案 0 :(得分:1)
您可以查看他们的Android Upload Example。
如果查看上传请求here,您可以看到POST请求正文中没有发送参数(正如您尝试的那样)。相反,它们是附加到网址的查询(可以使用QUrlQuery
在Qt中完成),图片在请求正文中发送并且不需要使用base64对其进行编码(这样可以节省一些网络流量,因此更好。)
以下是您的上传功能的样子:
bool ImgurUploader::upload(QImage image, QString title, QString description)
{
QByteArray byteArray;
QBuffer buffer(&byteArray);
image.save(&buffer, "PNG");
QUrlQuery urlQuery;
urlQuery.addQueryItem("title", title);
urlQuery.addQueryItem("description", description);
QNetworkRequest request;
QUrl url("https://api.imgur.com/3/image");
url.setQuery(urlQuery);
request.setUrl(url);
request.setHeader(QNetworkRequest::ContentTypeHeader,
"application/application/x-www-form-urlencoded");
request.setRawHeader("Authorization", "Client-ID 16d41e28a3ba71e");
mAccessManager->post(request, byteArray);
}