我有一个nodejs(+ express + mongodb,gridstore)后端,并希望将照片上传到脸谱相册。
我遇到了两种方法。第一个(https://developers.facebook.com/blog/post/526/)需要获取我的图片的完整网址资源,我没有,因为它是我从gridstore提取的数据, 而第二个(https://developers.facebook.com/docs/reference/api/album/)的记录非常糟糕,通过Graph API,我无法弄清楚我的请求应该是什么样子。 (表单数据,它应该具有哪些字段,如何将我的数据blob \ stream从gridstore转换为它)
这是我目前所拥有的,并且不起作用:
facebook.uploadPhoto = function (token, albumId, photo, callback) {
var fb = fermata.json('https://graph.facebook.com/' + albumId);
fb.photos({access_token:token}).post({'Content-Type':"multipart/form-data"}, {source:{data:photo}}, callback);
};
非常感谢任何帮助
答案 0 :(得分:4)
文件很可能没有正确序列化。 Fermata将通过数据获取节点文件缓冲区。你尝试过那个吗?
fs.readFile("/path/to/photo.jpg", function (err, data) {
fermata.json("https://graph.facebook.com/graph/api").post({"Content-Type":"multipart/form-data"}, {fileField: {data:data, name:"", type:""} }, callback);
});
添加您的访问令牌等。
答案 1 :(得分:1)
我使用poster模块对facebook图形API使用简单的POST解决了这个问题。
var options = {
uploadUrl: 'https://graph.facebook.com/'+user+'/photos?access_token='+accessToken,
method: 'POST',
fileId: 'source',
fields: {'message':''} // Additional fields according to graph API
};
var fileName = ''; // Local or remote url where to find the image
poster.post(fileName, options, function(err, data) {
if (err) {
//Something went wrong
} else {
// Everything ok
}
});
答案 2 :(得分:0)
老实说,我使用Facebook图形API并且主要使用PHP和Java的经验有限。
以下是您可能会发现有用的一些视频流:
基本上,我建议您在实现中稍微进行一些操作,并按以下方式对其进行编码:
基本上,这将允许您通过将浏览器指向REST Web服务来验证图像输出,并避免uploadToFacebook函数中的任何blob \ stream转换。我假设您将图像存储在gridstore与mongodb中。
希望有所帮助...