AS3:如何显示ByteArray上传百分比?

时间:2013-10-14 09:39:36

标签: php actionscript-3

我用ShineMP3录制声音。现在我正在尝试将mp3文件上传到服务器。这是我的AS3代码:

function onWavClick(e:MouseEvent)
{
  var sba:ByteArray = mp3Encoder.mp3Data; 
  var req:URLRequest = new URLRequest('http://localhost/upload.php');
  req.contentType = 'application/octet-stream';
  req.method = URLRequestMethod.POST;
  req.data = sba;           
  var loader:URLLoader = new URLLoader(req);
}

如何显示上传的百分比,如果已完成并成功转到下一帧?

感谢。

2 个答案:

答案 0 :(得分:0)

一个建议可能就是这个PHP上传进度条:

http://www.johnboyproductions.com/php-upload-progress-bar/

答案 1 :(得分:0)

不要在URLRequest的构造函数中传递URLLoader,而是使用URLLoader的load()方法。实际上,您不应该通过构造函数传递请求,因为它会立即启动请求,并且可以在您有时附加事件侦听器之前完成。始终遵循以下流程:

  1. 实例化URLLoader和URLRequest
  2. 在两个
  3. 上附加事件侦听器并设置属性
  4. 使用URLRequest
  5. 致电load()

    这样您就可以附加ProgressEvent类型PROGRESS的事件,该事件在发送时将包含bytesTotalbytesLoaded属性。您可以使用它们来显示您想要的百分比。您还可以附加Event.COMPLETE,这将在上传完成时触发。

    function onWavClick(e:MouseEvent)
    {
       var sba:ByteArray = mp3Encoder.mp3Data; 
       var req:URLRequest = new URLRequest(URL);
       req.contentType = 'application/octet-stream';
       req.method = URLRequestMethod.POST;
       req.data = sba;           
       var loader:URLLoader = new URLLoader();
       loader.addEventListener( ProgressEvent.PROGRESS, progressHandler );
       loader.addEventListener( Event.COMPLETE, completeHandler );
       loader.load( req );
    }
    
    function progressHandler( e:ProgressEvent ):void {
        trace( e.bytesLoaded / e.bytesTotal ); // output: progress, as a decimal from 0 to 1
    }
    
    function completeHandler( Event ):void {
        // download/upload is complete
    }