вставить новое изображение в альбом google-picasa, используя gdata apis через oauth2.0 в nodejs

Я попытался вставить новое изображение в альбом google-picasa, используя Gdata API для аутентификации через oauth2.0 из модуля request.js node.js.

Моя функция:

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

что я сделал не так, может ли кто-нибудь помочь мне!!


person sridhar    schedule 19.01.2014    source источник


Ответы (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);
        }

    });
person user1929819    schedule 01.05.2014