上传图片到imgur时如何传递几个参数

How to pass several parameters when uploading image to imgur

我正在尝试制作一个将图片上传到 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”错误是 "Invalid URL"。

如何发送多个参数?我是不是用错了方法?

你可以看看他们的Android Upload Example

如果您查看上传请求 here, you can see that parameters are not sent in the body of the POST request (as you are trying to do). Instead, they are queries that are appended to the URL (this can be done in Qt using QUrlQuery),图像在请求正文中发送,无需使用 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);
}