1

スプライトをサーバーに保存しているときに、興味深い問題が発生しているようです。MAC で swf (リモート) を実行すると正常に動作しますが、Windows コンピューターからまったく同じ URL を実行すると #2048 SecurityError が発生します。

ここに私のAS3コード:

    public function saveSprite(s:Sprite):void {
        var bmpData:BitmapData = new BitmapData(s.width, s.height, true, 0xFFFFFF);
        bmpData.draw(s);
        var byteArray:ByteArray = PNGEncoder.encode(bmpData);
        var encodedFile:Base64Encoder = new Base64Encoder();
        encodedFile.encodeBytes(byteArray);

        var data:URLVariables = new URLVariables();
        data.fileData = encodedFile;
        data.fileName = "test.png";
        data.location = "temp/";

        var request:URLRequest = new URLRequest(scriptLocation);
        request.method = URLRequestMethod.POST;
        request.data = data;

        var loader:URLLoader = new URLLoader();
        loader.addEventListener(Event.COMPLETE, errorLog);
        loader.addEventListener(Event.OPEN, errorLog);
        loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, errorLog);
        loader.addEventListener(IOErrorEvent.IO_ERROR, errorLog);
        loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, errorLog);
        loader.addEventListener(ProgressEvent.PROGRESS, errorLog)

        try {
            loader.load(request);
        } catch (e:*) {
            debug.updateLog(e + "\n");
        }
    }

    private function errorLog(e:*):void {
        debug.updateLog(e + "\n");
    }

AS3 は、次の 1 行の PHP ファイルに接続します。

<?php file_put_contents($_POST['location'] . $_POST['fileName'], base64_decode($_POST['fileData']));

私の Mac で SWF を実行すると、出力は次のようになります。 =7 bytesTotal=0] [HTTPStatusEvent type="httpStatus" bubble=false cancelable=false eventPhase=2 status=200 responseURL=null] [Event type="complete" bubble=false cancelable=false eventPhase=2]

Windows では次のような出力が得られます: Log Start [HTTPStatusEvent type="httpStatus" bubbles=false cancelable=false eventPhase=2 status=0 responseURL=null] [SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase= 2 text="エラー #2048"]

これに関する任意の考えをいただければ幸いです。私自身の推測では、ファイルのアクセス許可があるものになると思いますが、何ですか?

前もって感謝します!

【追記】ますます面白くなりました。1. プロジェクト全体を別のサーバーに移動すると、Windows と Mac で #2048 が表示されます。2. ファイルのパーミッションを 777 に変更すると、Windows と Mac でも #2048 が表示されます。

4

1 に答える 1

1

ついに!見つけました。

ウェブサーバーのルートに crossdomain.xml を追加すると、問題が解決しました。アクセスするphpファイルが同じサーバー上にあるため、これで問題が解決するのは奇妙に思えます。しかも同じフォルダに!

MAC OSX では、FlashPlayer はリクエストが同じドメイン内にあることを認識しているようですが、Windows では認識できません。これは、Windows でセキュリティ エラーが発生する理由を説明しています。その結果、swf は MAC で動作しましたが、Windows マシンでは動作しませんでした。今のところ、次の crossdomain.xml ファイルをサーバーのルートに追加しました。

<?xml version="1.0" ?>

<cross-domain-policy>
    <site-control permitted-cross-domain-policies="master-only"/>
    <allow-access-from domain="*.mydomain.com" to-ports="*"/>
    <allow-http-request-headers-from domain="*.mydomain.com" headers="*"/>
</cross-domain-policy>

このソリューションを使用する場合は、「mydomain.com」を許可する特定のドメインに変更してください。crossdomain.xml の詳細と使用方法については、http: //learn.adobe.com/wiki/download/attachments/64389123/CrossDomain_PolicyFile_Specification.pdf?version =1 を参照してください。

質問で述べたように、次のエラーが発生しました: [SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048"]

通常、エラーには次の内容が含まれていることに注意してください。http://www.domain2.com/file .*からのデータ"]

私の場合、エラーの一部が欠落しているという事実は、同じドメイン内のファイルが要求されていることを示している可能性があります。

したがって、crossdomain.xml がうまく機能しました。この回答が誰かの役に立てば幸いです。

ハッピーコーディング!

于 2012-08-14T19:05:26.113 に答える