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)(查看这篇文章在哪里可以找到您的操作系统中的 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 回答