如何在将图像上传到imgur时传递几个参数

时间:2016-10-27 19:11:41

标签: qt image-uploading imgur

我试图创建一个上传图片的函数,并且函数在下面的表单中工作,但与我期望的不同。

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"错误是"无效的网址"。

我如何发送几个参数?我使用了错误的方法吗?

1 个答案:

答案 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);
}