在nodejs中通过oauth2.0使用gdata apis将新图像插入到google-picasa相册中

我尝试使用Gdata API通过oauth2.0从request.js node.js模块进行身份validation,从而将新图片插入到google-picasa相册中。

我的function:

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

将选项和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#Post照片

我做错了什么可以帮助我的任何人!

我认为问题是你使用“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); } }); }; 

和调用testing程序:

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