我在我的反应应用程序中使用Facebook Javascript SDK,我想发布一张包含多张照片的帖子。我知道这意味着我必须首先发布未发布的图片,然后使用返回的ID发布帖子。
但是,我无法找到好的文档并遇到问题,弄清楚如何允许用户选择并发布本地图片(而不是来自网址)。代码有点难以放在这里,但这里是我正在采取的步骤和我得到的错误:
使用文件输入获取用户选择的文件。
将图片编码为blob并将其和访问令牌放入FormData以在api请求中使用。
var reader = new FileReader();
reader.onload = function(e) {
var arrayBuffer = e.target.result;
var blob = new Blob([arrayBuffer], { type: photo.type });
var pictureData = new FormData();
pictureData.append('access_token:', this.state.FBaccessToken);
pictureData.append('source', blob);
return pictureData;
}.bind(this)
return reader.readAsArrayBuffer(photo);
发帖请求
var encodedRequest = this.encodePhoto(photo);
FB.api(
"/me/photos?published=false",
"POST",
encodedRequest,
function (response) {
if (response && !response.error) {
//once successfully gotten the photos add them to the array of photo ids
temp.push({"media_fbid": response.id});
console.log(response);
}
else {
alert(response.error.message);
}
}.bind(this)
);
我以这种方式运行时的错误是它似乎无法识别访问令牌,但是当我在步骤2中从pictureData中删除访问令牌,并将api encodedRequest部分更改为:
{
access_token: this.state.FBaccessToken,
source: encodedRequest,
},
我收到错误“(#324)需要上传文件”。我尝试将fileUpload: true,
添加到SDK初始化代码中,但似乎也没有做任何事情。发布简单的纯文本状态和从Feed中读取都可以正常工作。
很抱歉这篇长篇文章,但如果有人有任何见解,我将非常感激!谢谢。
答案 0 :(得分:0)
在第一次pictureData.append()调用中,是否是access_token后的额外冒号?
pictureData.append(' access_token:',this.state.FBaccessToken); 与 pictureData.append(' access_token',this.state.FBaccessToken);
编辑:下面是从邮递员输出到我的笔记本电脑上引用文件的后期图片
var form = new FormData();
form.append("source", "/Users/patricklambe/images/test.jpg");
form.append("access_token", "PAGEACCESSTOKEN");
form.append("caption", "check this photo");
var settings = {
"async": true,
"crossDomain": true,
"url": "https://graph.facebook.com/v2.11/444873272561515/photos",
"method": "POST",
"headers": {
"cache-control": "no-cache",
"postman-token": "1d786fec-c9b1-2494-1b5c-8fd0e2ea5ade"
},
"processData": false,
"contentType": false,
"mimeType": "multipart/form-data",
"data": form
}
$.ajax(settings).done(function (response) {
console.log(response);
});