2014-01-19 92 views
2

我嘗試使用Gdata API通過oauth2.0從request.js node.js模塊進行身份驗證,從而將新圖片插入到google-picasa相冊中。通過nodejs中的oauth2.0使用gdata apis插入新圖片到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

我做錯了什麼任何一個可以幫助我!

回答

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

    }); 
相關問題