C++ Qt或libcurl c++;:Facebook api发布图像上传请求

C++ Qt或libcurl c++;:Facebook api发布图像上传请求,c++,facebook,qt,http,post,C++,Facebook,Qt,Http,Post,你好。我无法理解如何创建上传图像的POST请求。我在网上搜索,发现了几个版本。但我总是(在请求之后)得到响应--“(#324)需要上传文件”。 谢谢大家! ui->webView->load(QUrl("https://www.facebook.com/dialog/oauth?" "client_id=XXXXXXXXXX&" "display=popup&"

你好。我无法理解如何创建上传图像的POST请求。我在网上搜索,发现了几个版本。但我总是(在请求之后)得到响应--“(#324)需要上传文件”。 谢谢大家!

ui->webView->load(QUrl("https://www.facebook.com/dialog/oauth?"
                       "client_id=XXXXXXXXXX&"
                       "display=popup&"
                       "response_type=token&"
                       "scope=user_status,user_photos,publish_actions&"
                       "redirect_uri=https://www.facebook.com/connect/login_success.html"));
1

QString uploadUrl = "https://graph.facebook.com/me/photos?access_token=" +
                    accessToken;

QString photoPath = QCoreApplication::applicationDirPath() + "/image_example.png";

QFileInfo fileInfo(photoPath);
QFile file(photoPath);

QString comment = "User provided message";

QString bound="---------------------------17673466415141";

QByteArray data;

data.append("--" + bound + "\r\n");
data.append("Content-Disposition: form-data; name=\"access_token\"\r\n\r\n");
data.append(accessToken + "\r\n");

data.append("--" + bound + "\r\n");
data.append("Content-Disposition: form-data; name=\"source\"; filename=\""
            + file.fileName()+"\"\r\n");
data.append("Content-Type: image/" + fileInfo.suffix().toLower() + "\r\n\r\n");
data.append(file.readAll());
data.append("\r\n");

data.append("--" + bound + "\r\n");
data.append("Content-Disposition: form-data; name=\"message\"\r\n\r\n");
data.append(comment);
data.append("--" + bound + "\r\n");

QNetworkRequest request(uploadUrl);

request.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
request.setRawHeader("Accept-Language", "en-us,en;q=0.5");
request.setRawHeader("Accept-Encoding", "gzip,deflate");
request.setRawHeader("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
request.setRawHeader("Keep-Alive", "300");

request.setRawHeader("Content-Type",
                     QString("multipart/form-data; boundary=" + bound).toLatin1());
request.setRawHeader("Content-Length", QString(data.size()).toLatin1());

QNetworkAccessManager * manager = new QNetworkAccessManager(this);
QNetworkReply * reply =  manager->post(request, data);
QEventLoop wait;

connect(manager, SIGNAL(finished(QNetworkReply*)), &wait, SLOT(quit()));
connect(manager, SIGNAL(finished(QNetworkReply*)), manager, SLOT(deleteLater()));

QTimer::singleShot(10000, &wait, SLOT(quit()));
wait.exec();

QByteArray answer = reply->readAll();
reply->deleteLater();

qDebug() << answer;
QString上传URL=”https://graph.facebook.com/me/photos?access_token=" +
accessToken;
QString photoPath=QCoreApplication::applicationDirPath()+“/image\u example.png”;
QFileInfo文件信息(光路);
QFile文件(photoPath);
QString comment=“用户提供的消息”;
QString-bound=“------------------------------------17673466415141”;
QByteArray数据;
data.append(“--”+绑定+”\r\n”);
data.append(“内容处置:表单数据;名称=\“访问\u令牌\”\r\n\r\n”);
data.append(accessToken+“\r\n”);
data.append(“--”+绑定+”\r\n”);
data.append(“内容处置:表单数据;名称=\”源\“文件名=\”)
+file.fileName()+“\”\r\n”);
data.append(“内容类型:image/”+fileInfo.suffix().toLower()+”\r\n\r\n”);
data.append(file.readAll());
data.append(“\r\n”);
data.append(“--”+绑定+”\r\n”);
data.append(“内容处置:表单数据;名称=\”消息\“\r\n\r\n”);
数据。附加(注释);
data.append(“--”+绑定+”\r\n”);
QNetworkRequest请求(上传URL);
setRawHeader(“Accept”,“text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8”);
setRawHeader(“接受语言”,“en-us,en;q=0.5”);
setRawHeader(“接受编码”、“gzip、deflate”);
setRawHeader(“接受字符集”,“ISO-8859-1,utf-8;q=0.7,*;q=0.7”);
请求。setRawHeader(“保持活动”、“300”);
request.setRawHeader(“内容类型”,
QString(“多部分/表单数据;边界=“+bound).toLatin1());
setRawHeader(“内容长度”,QString(data.size()).toLatin1());
QNetworkAccessManager*manager=新的QNetworkAccessManager(此);
QNetworkReply*reply=manager->post(请求、数据);
QEventLoop等待;
连接(管理器、信号(完成(QNetworkReply*))、等待、插槽(退出());
连接(管理器,信号(完成(QNetworkReply*)),管理器,插槽(deleteLater());
QTimer::singleShot(10000,&wait,SLOT(quit());
wait.exec();
QByteArray-answer=reply->readAll();
回复->删除稍后();

qDebug()我实际上使用了与第二个示例类似的东西。但你需要:

1/在imagePart标题中设置图像的大小
2/您正在重新定义ContentDisposition。你只需要第一个

因此,总结一下:

QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
QHttpPart imagePart;
imagePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant(type.name()));
imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"source\"; filename=\""+ file.fileName()));
imagePart.setHeader(QNetworkRequest::ContentLengthHeader, QString::number(fileInfo.size()).toLocal8Bit());
imagePart.setBody(file.readAll());
multiPart->append(imagePart);

我实际上使用了与第二个例子类似的东西。但你需要:

1/在imagePart标题中设置图像的大小
2/您正在重新定义ContentDisposition。你只需要第一个

因此,总结一下:

QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
QHttpPart imagePart;
imagePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant(type.name()));
imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"source\"; filename=\""+ file.fileName()));
imagePart.setHeader(QNetworkRequest::ContentLengthHeader, QString::number(fileInfo.size()).toLocal8Bit());
imagePart.setBody(file.readAll());
multiPart->append(imagePart);