将照片上传到脸谱相册

时间:2012-09-29 08:19:46

标签: node.js mongodb facebook-graph-api

我有一个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);
};

非常感谢任何帮助

3 个答案:

答案 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的经验有限。

以下是您可能会发现有用的一些视频流:

基本上,我建议您在实现中稍微进行一些操作,并按以下方式对其进行编码:

  1. 在Node.js中创建一个REST Web服务函数调用,以使用内部UID从gridstore输出单个图像。
  2. 对uploadToFacebook函数进行编码,以使用调用REST Web服务函数的图像URL。
  3. 基本上,这将允许您通过将浏览器指向REST Web服务来验证图像输出,并避免uploadToFacebook函数中的任何blob \ stream转换。我假设您将图像存储在gridstore与mongodb中。

    希望有所帮助...