4

我有一个 nodejs (+express + mongodb,gridstore) 后端,并且想将照片上传到 Facebook 相册。

我遇到了两种方法。第一个(https://developers.facebook.com/blog/post/526/)需要获取我的图片的完整 url 资源,我没有,因为它是我从 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);
};

任何帮助将非常感激

4

3 回答 3

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);
});

添加您的访问令牌等。

于 2012-10-04T01:31:45.563 回答
1

我通过使用海报模块使用简单的 POST 到 facebook 图形 API 解决了这个问题。

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
  }
});
于 2012-10-03T21:47:02.267 回答
0

老实说,我使用 Facebook 图形 API 的经验有限,主要使用 PHP 和 Java。

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

基本上,我建议你在你的实现中加一点点,并按以下方式编码:

  1. 在 Node.js 中创建一个 REST Web 服务函数调用,以使用内部 UID 从 gridstore 输出单个图像。
  2. 对您的 uploadToFacebook 函数进行编码以使用调用 REST Web 服务函数的图像 URL。

基本上,这将允许您通过将浏览器指向 REST Web 服务来验证图像输出,并避免在您的 uploadToFacebook 函数中进行任何 blob\stream 转换。我假设您将图像存储在 gridstore 与 mongodb 中。

希望有帮助...

于 2012-10-02T05:15:22.743 回答