1

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;
    }
4

3 に答える 3

2

そのパラメータリストをどこから取得したかはわかりませんが、ドキュメントによると、 fileNameimageもありません。必要なソースを使用する必要があります。

もう1つは、これをmultipart / form-dataとして投稿する必要があるということですが、これは投稿しません。

このスレッドを確認しましたか:FacebookGraphAPI-JavaScriptを使用して写真をアップロードする

于 2012-04-14T16:00:37.100 に答える
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>
于 2012-09-17T00:20:13.580 に答える
1

ログイン用のFacebook JS SDKと、Facebookに画像を投稿するための単純なActionscriptのHTTP関数を使用して解決しました。

これは 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_tokenonLoginSuccessFB Javascript SDK のコールバックによって返されます。

于 2013-12-27T14:03:24.403 に答える