我需要为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;
用于&#34; snapshotdata&#34;的上述代码参数看起来像这样:&#34;数据:image / png; base64,iVBORw0KGgoAAAA ..........&#34;
但是我的图像没有使用上面的代码上传到Facebook。但是如果我使用url:'http://example.com/abc.png'
而不是source:blob
使用相同的代码,那么它会成功上传给定网址中的图片。我试图找到上述代码的错误,但我无法找到合适的解决方案。请告诉我是否有人知道上述代码的问题。
ps:抱歉英语不好
答案 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);}
}
}