【问题标题】:Upload ByteArray image on Facebook with Javascript SDK使用 Javascript SDK 在 Facebook 上传 ByteArray 图像
【发布时间】:2012-04-14 15:17:07
【问题描述】:

我正在尝试使用 Javascript SDK 在 Facebook 上上传照片。 特别是我从我的 Actionscript3 应用程序生成一个 base64 编码的字节数组,我使用 ExternalInterface 将它传递给 Javascript 文件,然后我解码字节数组并尝试上传到 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;
    }

【问题讨论】:

    标签: javascript facebook actionscript-3 facebook-graph-api bytearray


    【解决方案1】:

    我不确定你从哪里得到那个参数列表,但是根据documentation 没有 fileName 也没有 image,你应该使用 source 这是必需的。

    另一件事是您需要将其发布为 multipart/form-data,而您不需要。

    你检查过这个帖子吗:Facebook Graph API - upload photo using JavaScript

    【讨论】:

    • 我在 AS3-facebook-api 中使用了该参数并且成功了!如何在 multipart/form-data 中编码 bytearray 图像?你链接我的线程对我没有多大帮助。
    • 动作脚本 sdk 不是官方的(据我所知),它们可能会为您“抽象”一些东西。如果它适用于您的 AS3 sdk,请使用它。
    • 我在登录回调方面遇到了一些问题,所以在多次尝试失败后,我决定打开 Javascript SDK..但我也发现了问题..我的目标是发布一些生成的图片从 Facebook 上的 actionscript 以稳定的方式。也许与 FB 交互的可靠方式是 PHP sdk?
    • 我不完全了解你的情况,但是如果上传在AC3中工作并且登录部分使用JS,那么只需使用js登录和AC3上传......你可以当然使用服务器端,但是你又让事情变得复杂了。
    • 让JS SDK来做大部分工作,然后当你需要上传图片时,只需从JS获取访问令牌(使用外部接口)并上传图片,你甚至不需要需要使用 AS3 SDK,只需向图形 url 发出 POST 即可。
    【解决方案2】:

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

    这很简单:一旦您的用户使用“publish_stream”授权您的 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>
    

    【讨论】:

      【解决方案3】:

      我解决了使用 Facebook JS SDK 登录的问题,以及简单的 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_token由FB Javascript SDK的onLoginSuccess回调返回。

      【讨论】:

      • 您是否能够收到与图片一起发布的消息?我发现它没有携带我的信息?但是在其他地方看到您不能再发布带有图像的消息了..?这是真的吗?
      • @Lagoo87 你是什么意思?如果您指的是图片帖子中显示的消息(上例中的“我上传的照片!”),则它已正确发布。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-09
      • 2012-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-01
      • 1970-01-01
      相关资源
      最近更新 更多