使用gdata api通过节点js中的oauth 2.0将新图像插入到google-picasa相册中

时间:2014-01-19 13:13:54

标签: node.js request gdata gdata-api picasa

我尝试通过来自request.js node.js模块的oauth2.0使用Gdata api身份验证向google-picasa相册插入新图片。

我的功能:

insertPhoto(options,callback){
    fs.readFile('C:/Users/Public/Pictures/Sample Pictures/Chrysanthemum.jpg',"base64",function(error,data){
        var userId=options.userId || 'default';
        var rootUrl='https://picasaweb.google.com/data/feed/api/user/'+userId+'/albumid/'+options.albumId+'';
        var body_data=gen_multipart('testing.jpg','sss',data,'image/jpeg');
        request({
            method:'POST',
            headers:{ 'GData-Version': '2','Authorization':'Bearer' + ' ' + 'my_access_token',"Content-Type":'multipart/related; boundary="END_OF_PART"','Content-Length':body_data.length,"MIME-version":"1.0"},
            body:body_data,
            uri:rootUrl
        },callback);    
    });   
}

将选项和回调传递给我的函数

insertPhoto({albumId:'5917473565459053457'},function(error,success){
    if(error){
        console.log(error);
    }else{
        console.log(success);
    }
});

以下是我的输出

{ status: 400, message: 'Not an image.' }
  

不是图像。

我的标题和请求正文中出现的错误与google文档中的相同。

参考:https://developers.google.com/picasa-web/docs/2.0/developers_guide_protocol#PostPhotos

我做错了可以帮助我!

1 个答案:

答案 0 :(得分:1)

我认为问题是你使用“base64”应该是二进制

这段代码似乎为我做了工作:

var fs = require('fs');
var request = require('request');

exports.upload = function(fileName, options, callback) {
    fs.readFile(fileName,function(error,data) {
        if (error) {
            callback(error, null, null);
        }
        else {
            console.log('Read file', data.length);

            var token = options.token;
            var userId = options.userId || 'default';
            var rootUrl = 'https://picasaweb.google.com/data/feed/api/user/'+
                userId+'/albumid/'+
                options.albumId+'';
            request({
                method:'POST',
                headers:{ 
                    'GData-Version': '2',
                    'Authorization':'Bearer' + ' ' + token,
                    "Content-Type":'image/jpeg',
                    'Content-Length':data.length,
                    "MIME-version":"1.0"},
                body:data,
                uri:rootUrl
            },callback);
        }
    });
};

呼叫测试程序:

    var imageUpload = require('./imageUpload');
var parseString = require('xml2js').parseString;

imageUpload.upload('...fileName...', { 
        albumId: '....', 
        userId: '...',
        token: '...'
    }, 
    function(error, response, body) {
        if (body && (response.statusCode === 200 || response.statusCode === 201 || response.statusCode === 202)) {
            parseString(body, function (err, result) {
                console.dir(result);

                if (!err) {
                    console.dir(result.entry['media:group'][0]['media:content'][0].$.url);
                }
                else {
                    console.error('Error', err);
                }
            });
        }
        else {
            console.error('Error', response.statusCode, body);
        }

    });