使用JavaScript的Facebook照片上传无效

时间:2015-02-15 19:26:12

标签: javascript facebook facebook-javascript-sdk construct-2

我需要为construct 2插件编写一个javascript代码。下面是我的代码:



Acts.prototype.PublishToWallPHOTO = function (snapshotdata)
	{
		if (this.runtime.isDomFree || !fbLoggedIn)
			return;		
var blob; 
	 try
	 {
 blob = dataURItoBlob(snapshotdata.replace("data:image/png;base64,", ""),'image/png');
         }
	 catch(e){console.log(e);}
			
		
		FB.api('/me/photos', 'POST', {
        message:'photo description',
        source:blob        
    }, function(response) {
	if (!response || response.error)
		console.error(response);
			});
	};
	
	
function dataURItoBlob(dataURI,mime)
{
     var byteString = window.atob(dataURI);
     var ia = new Uint8Array(byteString.length);
     for (var i = 0; i < byteString.length; i++) {
     ia[i] = byteString.charCodeAt(i);
     }
     var blob = new Blob([ia], { type: mime });
     return blob;
}
&#13;
&#13;
&#13;

用于&#34; snapshotdata&#34;的上述代码参数看起来像这样:&#34;数据:image / png; base64,iVBORw0KGgoAAAA ..........&#34;

但是我的图像没有使用上面的代码上传到Facebook。但是如果我使用url:'http://example.com/abc.png'而不是source:blob使用相同的代码,那么它会成功上传给定网址中的图片。我试图找到上述代码的错误,但我无法找到合适的解决方案。请告诉我是否有人知道上述代码的问题。

ps:抱歉英语不好

1 个答案:

答案 0 :(得分:0)

也许FormData()可以解决问题。

function uploadPicture(response) {
  if (response.status === 'connected') {

    var blob = dataURItoBlob(imageHolder.imageElement.dom.src.replace("data:image/png;base64,", ""),'image/png');
    var fd = new FormData();
    var token = response.authResponse.accessToken;

    fd.append("access_token",token);
    fd.append("source\"; filename=\"" + "test.png" + "\"", blob);
    fd.append("message","Test");
    try{
      $.ajax({
        url:"https://graph.facebook.com/me/photos?access_token=" + token,
        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);}
  }
}