使用facebook-node-sdk进行照片上传模块/(#324)需要上传文件

时间:2014-04-23 23:12:15

标签: facebook node.js

我正在尝试使用facebook node sdk module将照片发送到页面。 https://github.com/Thuzi/facebook-node-sdk/

我可以发布到页面墙或从网址上传。但我试图从数据上传照片时遇到问题。

这就是我的联系方式:

FB.api('oauth/access_token', {
        client_id: clientid,
        client_secret: clientsecret,
        redirect_uri: redirecturi,
        code: code,
        scope: scope,
        fileUpload : true,
    }, function (resf) { ...}

我得到了这样的好的访问令牌:

 FB.api('/me/accounts', function (resf) {
            if (!resf || resf.error) {
                console.log(!resf ? 'error occurred' : resf.error);
                return;
            }

            for (var i = 0; i < resf.data.length; i++) {
                if (resf.data[i].id == pageid)
                {
            resf.data[i]. access_token
                    }
    });

我尝试上传照片:

var buff = "data:image/jpeg;base64,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";
                    var body = 'My firstdfsfsfd';
                    FB.api(pageid + '/photos', 'post', { message: body, source: buff, }, function (resf) {
                        if (!resf || resf.error) {
                            console.log(!resf ? 'error occurred' : resf.error);
                            return;
                        }
                        console.log( resf);
                        res.send(resf);
                    });

我有这个错误:

{
  "error": {
    "message": "(#324) Requires upload file",
    "type": "OAuthException",
    "code": 324
  }
}

此通话有效:

var body = 'My firstdfsfsfd';
                        FB.api(pageid + '/photos', 'post', { message: body, url: 'url_image', }, function (resf) {
                            if (!resf || resf.error) {
                                console.log(!resf ? 'error occurred' : resf.error);
                                return;
                            }
                            console.log( resf);
                            res.send(resf);
                        });

我忘记了什么?

此模块允许使用分段上传:https://github.com/Thuzi/facebook-node-sdk/

2 个答案:

答案 0 :(得分:2)

它似乎不支持multipart。您可以使用request模块手动执行此操作:

var request = require('request');

// ....

var access_token = 'abc123',
    pageid = 'me',
    fburl = 'https://graph.facebook.com/'
            + pageid
            + '/photos?access_token='
            + access_token,
    req,
    form;

req = request.post(fburl, function(err, res, body) {
  if (err)
    return console.error('Upload failed:', err);
  console.log('Upload successful! Server responded with:', body);
});
form = req.form()
// append a normal literal text field ...
form.append('message', 'My photo!');

// append a file field by streaming a file from disk ...
form.append('source', fs.createReadStream(path.join(__dirname, 'photo.jpg')));
// or append a Buffer ...
form.append('source', someBuffer);
// or append the contents of a remote url ...
form.append('source', request('http://google.com/doodle.png'));

答案 1 :(得分:1)

上面的示例(来自mscdex)适用于:

form.append('source', requestLib('<imageURL>'));

给予回应:

  

{ “ID”: “756317401077924”, “POST_ID”: “100000990137087_756310827745248”}

也适用于:

form.append('source', fs.createReadStream('<imagepath>'));

给予回应:

  

{ “ID”: “756328687743462”, “POST_ID”: “100000990137087_756310827745248”}

这可能就是我所需要的。谢谢mscdex,非常有帮助。但出于好奇,当我用图像缓冲区替换它时:

form.append('source', imageBuffer);

它提供与OP相同的错误(即使使用与OP相同的图像字符串):

  

{“error”:{“message”:“(#324)需要上传文件”,“类型”:“OAuthException”,“code”:324}}

为什么呢?我的猜测是Facebook想要一个特定的编码图像格式。