Javascript Phonegap/Cordova将照片上载到graph.facebook-需要上载文件

Javascript Phonegap/Cordova将照片上载到graph.facebook-需要上载文件,javascript,android,facebook,cordova,facebook-graph-api-v2.0,Javascript,Android,Facebook,Cordova,Facebook Graph Api V2.0,我使用的是facebook graph api的v2.0版本,我正在尝试将图片上传到v2.0/me/photos,但不幸的是,我遇到了这个错误(#324)需要上传文件,这很奇怪,因为我有发布操作权限,文档中说这就是我所需要的 我使用的是phonegap,因此普通的JSSDK对我不起作用,而cordova facebook插件使cordova的构建失败(遵循至少5个论坛/博客上的说明,没有任何效果),这就是为什么我对我的应用程序使用纯XMLHTTPRequests和AJAX请求。一切都很好(我可以

我使用的是facebook graph api的v2.0版本,我正在尝试将图片上传到v2.0/me/photos,但不幸的是,我遇到了这个错误
(#324)需要上传文件
,这很奇怪,因为我有发布操作权限,文档中说这就是我所需要的

我使用的是phonegap,因此普通的JSSDK对我不起作用,而cordova facebook插件使cordova的构建失败(遵循至少5个论坛/博客上的说明,没有任何效果),这就是为什么我对我的应用程序使用纯XMLHTTPRequests和AJAX请求。一切都很好(我可以在用户的墙上发布消息,登录也很好),除了这个图片上传。这是我正在使用的函数(数据是图像的URI):


p.S.2:我尝试将
&upload_file=true
添加到post请求的url,真的没有运气/

这是我发现的解决方案,使用cordova文件传输插件,它的工作原理与数据URI类似:

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

但首先,使用
cordova plugin add org.apache.cordova.file transfer

将该插件添加到cordova,这是我发现的解决方案,使用cordova file transfer插件,在数据URI方面效果非常好:

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;
}
但首先,使用
cordova plugin add org.apache.cordova.file transfer将插件添加到cordova

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