2012-11-02 13 views
5

私はPhonegapで作業しています。Facebookのイベントで写真をphonegapでアップロードするには?

は今、私はこれを使用しています: -

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

    Some code here 

}, "json"); 
+0

私にこの質問の答えを与えてください、このコードは、私のデバイスのイメージのウェブ画像のURLのためではない働いていますアンドロイドデバイスのメディアのブラウジング方法ではなく、multipart/form-dataとを作成してください。 Androidブラウザはinput type = "file"をサポートしていません。私は何をすべきか? –

+0

解決策は見つかりましたか? – Brune

答えて

0

はたぶん、この方法を試してみてください、それは私の作品:

function PostImageToFacebook(authToken, filename, mimeType, imageData) 
{ 
    if (imageData != null) 
    { 
     //Prompt the user to enter a message 
     //If the user clicks on OK button the window method prompt() will return entered value from the text box. 
     //If the user clicks on the Cancel button the window method prompt() returns null. 
     var message = prompt('Facebook', 'Enter a message'); 

     if (message != null) 
     { 
      // this is the multipart/form-data boundary we'll use 
      var boundary = '----ThisIsTheBoundary1234567890'; 

      // let's encode our image file, which is contained in the var 
      var formData = '--' + boundary + '\r\n' 
      formData += 'Content-Disposition: form-data; name="source"; filename="' + filename + '"\r\n'; 
      formData += 'Content-Type: ' + mimeType + '\r\n\r\n'; 
      for (var i = 0; i < imageData.length; ++i) 
      { 
       formData += String.fromCharCode(imageData[ i ] & 0xff); 
      } 
      formData += '\r\n'; 
      formData += '--' + boundary + '\r\n'; 
      formData += 'Content-Disposition: form-data; name="message"\r\n\r\n'; 
      formData += message + '\r\n' 
      formData += '--' + boundary + '--\r\n'; 

      var xhr = new XMLHttpRequest(); 
      xhr.open('POST', 'https://graph.facebook.com/me/photos?access_token=' + authToken, true); 
      xhr.onload = xhr.onerror = function() { 
      }; 
      xhr.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + boundary); 
      xhr.sendAsBinary(formData); 
     } 
    } 
} 

・ホープ、この(画像データは、画像のバイナリ表現でなければなりません)助けて!さようなら!

+0

動作していません..「不明なエラーが発生しました」というメッセージが表示されています。 – Brune

0

これは役に立つと思います。 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; 
} 
1

私は1枚の写真をアップロードできないという苦労を知っています。私はangular.jsを使用していますことに注意してください(このコードを使用し、その後cordova plugin add org.apache.cordova.file-transfer

:研究の眠れぬ夜と日後、私は最終的にそれが最初にプラグインを追加コルドバファイル転送プラグイン

で動作するようになりました。ユーザーの約束は絶対にしないでください)あなたの約束をするために、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; 
} 
+0

私はこれを試しました。それは動作しますが、勝利からの応答を得るために永遠にかかります。 PCエミュレータで60秒以上。 – Brian

関連する問題