通过Javascript/Phonegap将base64图像上载到Facebook graph API

通过Javascript/Phonegap将base64图像上载到Facebook graph API,javascript,facebook,cordova,sdk,base64,Javascript,Facebook,Cordova,Sdk,Base64,我正试图向“+userID+”/photos?access_token=“+accessToken”)发出“post”请求 “url”参数为base64数据URI 我得到了错误“数据:base64…”。。。。是内部URL,但这是外部请求。“ init({appId:“FB的ur ap id”,状态:true,cookie:true}); FB.登录(功能(响应){ if(response.authResponse){ var access_token=FB.getAuthResponse()['

我正试图向“+userID+”/photos?access_token=“+accessToken”)发出“post”请求

“url”参数为base64数据URI

我得到了错误“数据:base64…”。。。。是内部URL,但这是外部请求。“


init({appId:“FB的ur ap id”,状态:true,cookie:true});
FB.登录(功能(响应){
if(response.authResponse){
var access_token=FB.getAuthResponse()['accessToken'];
FB.api(“我/照片”、“帖子”{
消息:“由xxxx发布”,
状态:“成功”,
访问令牌:访问令牌,
url:'test.png'
},功能(回应){
如果(!response | | response.error){
警报(“发生错误”);
}否则{
警报(“在Facebook上发布的图像”);
}
});
}否则{
}
},{范围:'用户照片,照片上传,发布流,离线访问'});
},
错误:函数(){
}

我知道无法上传一张照片的痛苦。经过不眠之夜和数天的研究,我终于让它与cordova文件传输插件一起工作

此解决方案不需要Uint8Array或blob支持;)

首先添加插件:
cordova plugin add org.apache.cordova.file transfer

然后,使用以下代码(请注意,我使用的是angular.js。请不要使用承诺,或者使用诸如rsvp或Q之类的库来做出承诺):


我也一直在搜索这张照片。我能找到的最接近的方法是将图像临时保存在服务器上,将图像发送到相册中,然后删除照片,因为一旦图像出现在Facebook上,就不再需要源图像。不过,期待其他人能找到什么。这张照片对我很有用:
  <script src='http://connect.facebook.net/en_US/all.js'></script>
 FB.init({appId: "ur ap id of fb", status: true, cookie: true});
FB.login(function(response) {
       if (response.authResponse) {
         var access_token =   FB.getAuthResponse()['accessToken'];
         FB.api('me/photos', 'post', {
             message: 'posted by xxxx',
             status: 'success',
             access_token: access_token,
             url: 'test.png'
         }, function (response) {

             if (!response || response.error) {
                alert('Error occured');
             } else {
                 alert('Image Posted On Facebook');
             }

         });
       } else {

       }
     }, {scope: 'user_photos,photo_upload,publish_stream,offline_access'});

        },
        error:function(){

        }
function postImage(fileURI, message) {

    var deferred = $q.defer();

    var win = function (r) {

        deferred.resolve(r);
    }

    var fail = function (error) {

        deferred.reject(error);
    }

    var options = new FileUploadOptions();
    options.fileKey = "file";
    options.fileName = 'name_of_photo_' + Math.round((+(new Date()) + Math.random()));
    options.mimeType = "image/jpg";

    var params = new Object();
    params.access_token = "your facebook access token ;)";
    params.message = message;
    params.no_story = false;

    options.params = params;

    var ft = new FileTransfer();
    ft.upload(fileURI, "https://graph.facebook.com/v2.0/me/photos", win, fail, options);

    return deferred.promise;
}