2013-10-14 67 views
0

我已經使用ShineMP3來錄製聲音。現在我試圖將mp3文件上傳到服務器。這是我的AS3代碼:AS3:如何顯示ByteArray上傳百分比?

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

如何顯示上傳的百分比,並且它是否已完成併成功轉到下一幀?

謝謝。

+0

嗯,我相信URLLoader有一個「進度」事件和bytesLoaded + bytesTotal屬性。看看這些是否適合你? – mitim

回答

0

不是傳遞的URLRequestURLLoader的構造,使用URLLoader的load()方法。實際上,您不應該通過構造函數傳遞請求,因爲它會立即啓動請求,並且可能會在您能夠附加事件偵聽器之前完成。始終遵循這個過程:

  1. 實例化的URLLoader和URLRequest
  2. 附加事件偵聽器和使用URLRequest

兩個

  • 呼叫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 
    } 
    
  • +0

    Thanks.It的作品。我有另一個問題!如何爲_sba_文件分配名稱,因爲有很多錄製的文件?再次感謝。 – Amir

    +0

    由於您直接從內存中上載數據,因此沒有文件名,因爲它不駐留在文件系統中。你將不得不在服務器端腳本中處理。 –

    +0

    我可以在上傳之前做這樣的事情:var namereq:URLRequest = new URLRequest(「http://localhost/upload.php」); \t namereq.method = URLRequestMethod.POST; \t var變量:URLVariables = new URLVariables(); \t var file_name:String ='s1'; \t variables.nam = file_nam; \t namereq.data = variables; \t loader.load(namreq);' – Amir