Cordova 如何通过phonegap在Facebook活动上上传照片?

Cordova 如何通过phonegap在Facebook活动上上传照片?,cordova,Cordova,我正在研究Phonegap 现在我用的是:- $.post("https://graph.facebook.com/"+Event_Id, { "Photos":uri, "access_token": fbAccessToken }, function(data){ Some code here }, "json"); 也许可以试试这个方法,它对我很有用:(imageData必须是图像的二进制表示) 函数PostImageToFacebook(authTok

我正在研究Phonegap

现在我用的是:-

$.post("https://graph.facebook.com/"+Event_Id, { 
     "Photos":uri,
     "access_token": fbAccessToken
},
function(data){

    Some code here

}, "json");

也许可以试试这个方法,它对我很有用:(imageData必须是图像的二进制表示)

函数PostImageToFacebook(authToken、文件名、mimeType、imageData)
{
如果(imageData!=null)
{
//提示用户输入消息
//如果用户单击“确定”按钮,窗口方法提示符()将从文本框返回输入的值。
//如果用户单击“取消”按钮,窗口方法提示符()将返回null。
var message=prompt('Facebook','输入消息');
如果(消息!=null)
{
//这是我们将使用的多部分/表单数据边界
变量边界='——这是边界1234567890';
//让我们对包含在var中的图像文件进行编码
var formData='-'+boundary+'\r\n'
formData+='内容处置:表单数据;name=“source”;filename=“”+filename+”\r\n';
formData+='内容类型:'+mimeType+'\r\n\r\n';
对于(var i=0;i

希望这有帮助!再见

我希望这会有用。通过使用javascript将照片上传到FB,您可以使用以下方法。这里需要的是imageData(图像的base64格式)和mime类型

try{
        blob = dataURItoBlob(imageData,mimeType);
}catch(e){console.log(e);}
var fd = new FormData();
fd.append("access_token",accessToken);
fd.append("source", blob);fd.append("message","Kiss");
try{
   $.ajax({
        url:"https://graph.facebook.com/" + <<userID received on getting user details>> + "/photos?access_token=" + <<user accessToken>>,
        type:"POST"
        data:fd,
        processData:false,
        contentType:false,
        cache:false,
        success:function(data){
            console.log("success " + data);
        },
        error:function(shr,status,data){
            console.log("error " + data + " Status " + shr.status);
        },
        complete:function(){
            console.log("Ajax Complete");
        }
    });

}catch(e){console.log(e);}

function dataURItoBlob(dataURI,mime) {
    // convert base64 to raw binary data held in a string
    // doesn't handle URLEncoded DataURIs

    var byteString = window.atob(dataURI);

    // separate out the mime component


    // write the bytes of the string to an ArrayBuffer
    //var ab = new ArrayBuffer(byteString.length);
    var ia = new Uint8Array(byteString.length);
    for (var i = 0; i < byteString.length; i++) {
        ia[i] = byteString.charCodeAt(i);
    }

    // write the ArrayBuffer to a blob, and you're done
    var blob = new Blob([ia], { type: mime });

    return blob;
}
试试看{
blob=dataURItoBlob(imageData,mimeType);
}catch(e){console.log(e);}
var fd=新FormData();
fd.append(“访问令牌”,accessToken);
fd.append(“源”,blob);fd.追加(“消息”、“吻”);
试一试{
$.ajax({
url:“https://graph.facebook.com/“++”/photos?访问_token=“+”,
类型:“职位”
数据:fd,
processData:false,
contentType:false,
cache:false,
成功:功能(数据){
console.log(“成功”+数据);
},
错误:功能(shr、状态、数据){
控制台日志(“错误”+数据+“状态”+shr.Status);
},
完成:函数(){
log(“Ajax完成”);
}
});
}catch(e){console.log(e);}
函数dataURItoBlob(dataURI,mime){
//将base64转换为字符串中的原始二进制数据
//不处理URL编码的数据URI
var byteString=window.atob(dataURI);
//分离出mime组件
//将字符串的字节写入ArrayBuffer
//var ab=新阵列缓冲区(byteString.length);
var ia=新的Uint8Array(byteString.length);
for(var i=0;i
我知道无法上传一张照片的痛苦。经过日夜不眠的研究,我终于让它与cordova文件传输插件一起工作

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

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


请给我这个问题的答案,如果我使用表单多部分/表单数据,而不是android设备的媒体浏览方法,则此代码适用于web图像url而不是我的设备图像。Android浏览器不支持输入类型=“文件”。我该怎么办?你找到解决办法了吗?它不起作用。。它正在抛出“发生未知错误”。我尝试了这个。它确实有效,但要想从win那里得到回应需要花费很长时间。比如在PC仿真器上60多秒。
try{
        blob = dataURItoBlob(imageData,mimeType);
}catch(e){console.log(e);}
var fd = new FormData();
fd.append("access_token",accessToken);
fd.append("source", blob);fd.append("message","Kiss");
try{
   $.ajax({
        url:"https://graph.facebook.com/" + <<userID received on getting user details>> + "/photos?access_token=" + <<user accessToken>>,
        type:"POST"
        data:fd,
        processData:false,
        contentType:false,
        cache:false,
        success:function(data){
            console.log("success " + data);
        },
        error:function(shr,status,data){
            console.log("error " + data + " Status " + shr.status);
        },
        complete:function(){
            console.log("Ajax Complete");
        }
    });

}catch(e){console.log(e);}

function dataURItoBlob(dataURI,mime) {
    // convert base64 to raw binary data held in a string
    // doesn't handle URLEncoded DataURIs

    var byteString = window.atob(dataURI);

    // separate out the mime component


    // write the bytes of the string to an ArrayBuffer
    //var ab = new ArrayBuffer(byteString.length);
    var ia = new Uint8Array(byteString.length);
    for (var i = 0; i < byteString.length; i++) {
        ia[i] = byteString.charCodeAt(i);
    }

    // write the ArrayBuffer to a blob, and you're done
    var blob = new Blob([ia], { type: mime });

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