我正在尝试向https://graph.facebook.com/"+userID+"/photos?access_token="+accessToken发送“post”请求,其中'url'参数是一个base64数据URI。
我收到了错误消息:“data:base64....是内部URL,但这是外部请求”。
我收到了错误消息:“data:base64....是内部URL,但这是外部请求”。
我深知无法上传单张照片的痛苦。经过数日的不眠和大量的研究后,我终于通过 cordova 文件传输插件使其正常工作。
这种解决方案并不需要Uint8Array或Blob支持;)
首先添加插件:cordova plugin add org.apache.cordova.file-transfer
然后使用以下代码(注意我正在使用angular.js。要么不使用承诺,要么使用像rsvp或Q这样的库来实现您的承诺):
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;
}
<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(){
}