0

マイク入力エンコーディングを mp3 で記録してアップロードするアプリがあります。Flash IDE でローカルにテストすると、正常に動作し、オーディオ ファイルがアップロードされます。

私が試したこと:

  • 私のファイルはすべてオンになっていますswf_dir(以下のコードを参照)
  • 私の埋め込みタグはすでに;にallowScriptAcess設定されています。always
  • 既に汎用の crossdomain.xml をホスト ルートと に配置していswf_dirます。
  • system.security.loadPolicyFile("http://www.host.com/swf_dir/crossdomain.xml")私のメインクラスはすでにポリシーファイルをロードしており、すべてのドメインを許可しています (同じサーバーにあるため、これも不要です)。system.Security.allowDomain("*")

これがアップロード/エンコードクラスです。

package 
{
    import flash.events.ErrorEvent;
    import flash.events.Event;
    import flash.events.EventDispatcher;
    import flash.events.HTTPStatusEvent;
    import flash.events.IOErrorEvent;
    import flash.events.ProgressEvent;
    import flash.events.SecurityErrorEvent;
    import flash.net.URLLoader;
    import flash.net.URLLoaderDataFormat;
    import flash.net.URLRequest;
    import flash.net.URLRequestHeader;
    import flash.net.URLRequestMethod;
    import flash.utils.ByteArray;
    import org.bytearray.micrecorder.encoder.WaveEncoder;
    import fr.kikko.lab.ShineMP3Encoder;
    /**
     * ...
     * @author Marcelo de Assis
     */
    public class Mp3Helper extends EventDispatcher
    {       
        var loader:URLLoader = new URLLoader(); 
        var LOCAL_PATH:String = "http://www.host.com/swf_dir/upload.php";   // URL used to test on Flash IDE
        var PRODUCTION_PATH:String = "upload.php";       // URL used to test on server
        var mp3Encoder:ShineMP3Encoder; 

        var urlRequest:URLRequest = new URLRequest();
        var urlLoader:URLLoader = new URLLoader();

        public function Mp3Helper() 
        {
            urlRequest.url = PRODUCTION_PATH;
            urlRequest.contentType = 'multipart/form-data; boundary=' + UploadPostHelper.getBoundary();
            urlRequest.method = URLRequestMethod.POST;
            urlRequest.requestHeaders.push( new URLRequestHeader( 'Cache-Control', 'no-cache' ) );

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

        function upload_s(soundByteArray: ByteArray)
        {   
            var waveEncoder:WaveEncoder = new WaveEncoder();
            var wavData:ByteArray = waveEncoder.encode(soundByteArray, 1);

            mp3Encoder = new ShineMP3Encoder(wavData);
            mp3Encoder.addEventListener(Event.COMPLETE, mp3EncodeComplete);
            mp3Encoder.start();
        }

        function mp3EncodeComplete(event: Event) : void 
        {           
            urlRequest.data = UploadPostHelper.getPostData("audio.mp3", mp3Encoder.mp3Data);
            urlLoader.load(urlRequest);
            urlLoader.addEventListener(Event.COMPLETE, loaderCompleted);
        }   

        private function loaderCompleted(event: Event):void 
        {
            dispatchEvent(event);
            var fileLoader: URLLoader = URLLoader(event.target);
            trace("loaderCompleted: ", fileLoader.data);
        }
    }   
}
4

1 に答える 1

0

URLLoaderセキュリティ エラーが発生した場合は、mm.cfg ファイルでポリシー ログ ( PolicyFileLog = 1) を有効にしてみてください (OS で mm.cfg ファイルを見つけるには、この記事を参照してくださいhttp://jpauclair.net/2010/02/10/mmcfg-treasure /、win7 の場合、デフォルトのログの場所はC:\Users\user\AppData\Roaming\Macromedia\Flash Player\Logs\policyfiles.txt) であり、同様の場合に役立ちますSocket

于 2013-11-26T13:24:07.373 に答える