【问题标题】:insert new image into google-picasa album using gdata apis through oauth2.0 in nodejs通过nodejs中的oauth2.0使用gdata api将新图像插入google-picasa相册
【发布时间】:2014-02-08 15:09:39
【问题描述】:

我尝试使用 Gdata api 通过 request.js node.js 模块中的 oauth2.0 身份验证将新图片插入到 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.' }

不是图片。

这是什么错误,我的标头和请求正文与谷歌文档中的相同。

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

我做错了什么谁能帮帮我!!

【问题讨论】:

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


    【解决方案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);
            }
    
        });
    

    【讨论】:

      猜你喜欢
      • 2011-10-08
      • 2017-07-10
      • 2011-05-18
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 2011-05-23
      • 2011-04-22
      相关资源
      最近更新 更多