使用Javascript SDK在Facebook上上传ByteArray图像

使用Javascript SDK在Facebook上上传ByteArray图像,javascript,facebook,actionscript-3,facebook-graph-api,bytearray,Javascript,Facebook,Actionscript 3,Facebook Graph Api,Bytearray,我正在尝试使用Javascript SDK在Facebook上上传照片。 特别是,我从Actionscript3应用程序生成了一个base64编码的bytearray,我使用ExternalInterface将其传递到Javascript文件,并从中解码bytearray,然后尝试上传到FB。但它给了我一个错误: {"error":{"message":"(#324) Requires upload file","type":"OAuthException","code":324}} 我试着简

我正在尝试使用Javascript SDK在Facebook上上传照片。 特别是,我从Actionscript3应用程序生成了一个base64编码的bytearray,我使用ExternalInterface将其传递到Javascript文件,并从中解码bytearray,然后尝试上传到FB。但它给了我一个错误:

{"error":{"message":"(#324) Requires upload file","type":"OAuthException","code":324}}
我试着简单地从url上传一张图片,这样效果很好

这是我的Javascript代码:

    upPhoto:function(photo) {
       var img = F.decode_base64(photo);

       FB.api('/me/photos', 'post', {
        message:'test',
        fileName:'test',
        image: img
       }, function(response){

          if (!response || response.error) {
            log('Error!');
          } else {
            log('Upload OK!');
          }
       });  
    }

    decode_base64:function(s) {
       var e={},i,k,v=[],r='',w=String.fromCharCode;
       var n=[[65,91],[97,123],[48,58],[47,48],[43,44]];

       for(z in n){for(i=n[z][0];i<n[z][1];i++){v.push(w(i));}}
       for(i=0;i<64;i++){e[v[i]]=i;}

       for(i=0;i<s.length;i+=72){
          var b=0,c,x,l=0,o=s.substring(i,i+72);
          for(x=0;x<o.length;x++){
            c=e[o.charAt(x)];b=(b<<6)+c;l+=6;
            while(l>=8){r+=w((b>>>(l-=8))%256);}
          }
       }
      return r;
    }
upPhoto:功能(照片){
var img=F.decode_base64(照片);
FB.api(“/me/photos”、“post”{
消息:'test',
文件名:'test',
图片:img
},功能(回应){
如果(!response | | response.error){
日志('Error!');
}否则{
日志('上传正常!');
}
});  
}
解码_base64:函数{
变量e={},i,k,v=[],r='',w=String.fromCharCode;
变量n=[[65,91]、[97123]、[48,58]、[47,48]、[43,44];

对于(z in n){for(i=n[z][0];i我不确定参数列表是从何处获得的,但是根据没有文件名或图像,您应该使用所需的源代码

另一件事是,您需要将其作为多部分/表单数据发布,而您不需要这样做


你检查过这个线程了吗:

我不确定你从哪里得到的参数列表,但是根据没有文件名和图像,你应该使用所需的源代码

另一件事是,您需要将其作为多部分/表单数据发布,而您不需要这样做


你检查过这个帖子了吗:

在过去的三天里,我已经花了好几个小时在这个话题上了。 现在,我知道了,我有一个解决方案来修复您的代码(您已经接近解决方案了..^^):

这很简单:一旦您的用户使用“发布流”授权您的fb应用程序,我只需使用以下代码,它会将图片上传到用户墙上:-) 我希望这真的有帮助

            <a href="#" onclick="uploadonwall(); return false;">Call the Publish Magic</a>
            <script>
            function uploadonwall(){
                FB.api('/me/photos', 'post',
                {
                    message: 'A new pic is on my wall ...',
                    url:'http://www.yourwebsite.com/big_image_about_to_be_published_on_facebook_user_wall.jpg'

                }, function(response) {
                    if (!response || response.error) {
                        alert('Oops! User Denied Access');
                    } else {
                        alert('Success: Content Published on Facebook Wall');
                    }
                });
            }
            </script>

函数uploadonwall(){
FB.api(“/me/photos”、“post”,
{
信息:“我的墙上有一张新照片……”,
网址:'http://www.yourwebsite.com/big_image_about_to_be_published_on_facebook_user_wall.jpg'
},功能(回应){
如果(!response | | response.error){
警报('Oops!用户拒绝访问');
}否则{
警报(“成功:内容发布在Facebook墙上”);
}
});
}

在过去的3天里,我花了好几个小时来讨论这个话题。 现在,我知道了,我有一个解决方案来修复您的代码(您已经接近解决方案了..^^):

这很简单:一旦您的用户使用“发布流”授权您的fb应用程序,我只需使用以下代码,它会将图片上传到用户墙上:-) 我希望这真的有帮助

            <a href="#" onclick="uploadonwall(); return false;">Call the Publish Magic</a>
            <script>
            function uploadonwall(){
                FB.api('/me/photos', 'post',
                {
                    message: 'A new pic is on my wall ...',
                    url:'http://www.yourwebsite.com/big_image_about_to_be_published_on_facebook_user_wall.jpg'

                }, function(response) {
                    if (!response || response.error) {
                        alert('Oops! User Denied Access');
                    } else {
                        alert('Success: Content Published on Facebook Wall');
                    }
                });
            }
            </script>

函数uploadonwall(){
FB.api(“/me/photos”、“post”,
{
信息:“我的墙上有一张新照片……”,
网址:'http://www.yourwebsite.com/big_image_about_to_be_published_on_facebook_user_wall.jpg'
},功能(回应){
如果(!response | | response.error){
警报('Oops!用户拒绝访问');
}否则{
警报(“成功:内容发布在Facebook墙上”);
}
});
}

我解决了使用FacebookJSSDK进行登录的问题,以及使用SimpleActionScript的HTTP函数在Facebook上发布图像的问题

这是AS3上传功能:

private function uploadOnFB(event:Event):void {

    var byteArray:ByteArray = PNGEncoder.encode(videobitmapData);

    var url:String = "https://graph.facebook.com/me/photos";

    var param:Object = new Object();
    param.message = "My uploaded photo!";
    param.access_token = access_token;

    var urlRequest:URLRequest = new URLRequest();
    urlRequest.url = url;
    urlRequest.contentType = 'multipart/form-data; boundary=' + UploadPostHelper.getBoundary();
    urlRequest.method = URLRequestMethod.POST;
    urlRequest.data = UploadPostHelper.getPostData("photo.png", byteArray, param);

    var urlLoader:URLLoader = new URLLoader();
    urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
    urlLoader.load(urlRequest);
}

access\u token
由FB Javascript SDK的
onLoginsAccess
回调返回。

我使用Facebook JS SDK解决了登录问题,并使用simple Actionscript的HTTP函数将图像发布到Facebook上

这是AS3上传功能:

private function uploadOnFB(event:Event):void {

    var byteArray:ByteArray = PNGEncoder.encode(videobitmapData);

    var url:String = "https://graph.facebook.com/me/photos";

    var param:Object = new Object();
    param.message = "My uploaded photo!";
    param.access_token = access_token;

    var urlRequest:URLRequest = new URLRequest();
    urlRequest.url = url;
    urlRequest.contentType = 'multipart/form-data; boundary=' + UploadPostHelper.getBoundary();
    urlRequest.method = URLRequestMethod.POST;
    urlRequest.data = UploadPostHelper.getPostData("photo.png", byteArray, param);

    var urlLoader:URLLoader = new URLLoader();
    urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
    urlLoader.load(urlRequest);
}

access\u token
由FB Javascript SDK的
onloginsucess
回调返回。

我在AS3 facebook api中使用了该参数,并且成功了!我如何在多部分/表单数据中对bytearray图像进行编码?您链接的线程对我帮助不大。动作脚本SDK不是官方的(据我所知),它们可能是“抽象的”对你来说有些事情。如果AS3 sdk对你有效,那么就使用它。我在登录回调方面遇到了一些问题,因此,在多次尝试失败后,我决定打开Javascript sdk。但同时,我也发现了一些问题。我的目标是以稳定的方式在Facebook上发布一些由actionscript生成的图片。也许这是一种可靠的集成方式ract with FB是PHP sdk吗?我不完全了解您的情况,但是如果上传在AC3中工作,登录部分在JS中工作,那么只需使用JS进行登录,使用AC3进行上传……您当然可以使用服务器端,但这样会使事情再次复杂化。让JS sdk完成大部分工作,然后当您需要上传pic j时ust从JS获取访问令牌(使用外部接口)然后上传图片,你甚至不需要使用AS3 SDK,只需发布一篇文章到图形url。我在AS3 facebook api中使用了这些参数,并且成功了!我如何在多部分/表单数据中编码bytearray图像?你链接到我的线程对我帮助不大。动作脚本SDK不是官方的(据我所知),它们可能是“抽象的”对你来说有些事情。如果AS3 sdk对你有效,那么就使用它。我在登录回调方面遇到了一些问题,因此,在多次尝试失败后,我决定打开Javascript sdk。但同时,我也发现了一些问题。我的目标是以稳定的方式在Facebook上发布一些由actionscript生成的图片。也许这是一种可靠的集成方式ract with FB是PHP sdk吗?我不完全了解您的情况,但是如果上传有效的话