2012-04-14 20 views
0

我的AS3代碼加載外部聲音:Actionscript從php加載外部聲音文件,並從php響應中找出實際的文件名?

var s:Sound = new Sound(); 
s.addEventListener(Event.COMPLETE, onSoundLoaded); 
var req:URLRequest = new URLRequest("getfile.php"); 
s.load(req); 

function onSoundLoaded(event:Event):void 
{ 
    var localSound:Sound = event.target as Sound; 
    localSound.play(); 
} 

然後我的PHP代碼返回的文件:

header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename='.basename($file)); 
header('Content-Transfer-Encoding: binary'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Pragma: public'); 
header('Content-Length: ' . filesize($file)); 
ob_clean(); 
flush(); 
readfile($file); 
exit; 

在onSoundLoaded情況下,我如何得到從PHP響應的實際文件名的回報?

回答

0

他們解決問題的方法是使用URLLoader http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/URLLoader.html加載數據而不是使用Sound類。這是因爲您可以收聽包裝響應標頭(包含文件名)的HTTPStatusEvent.HTTP_RESPONSE_STATUS - http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/URLLoader.html#event:httpResponseStatus事件。事件完成的偵聽器可以在您的代碼中未經修改使用,因爲它返回相同的數據。

var loader : URLLoader = new URLLoader(); 
    loader.addEventListener(Event.COMPLETE, onSoundLoaded); 
    loader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, onStatusResonse); 
    var req:URLRequest = new URLRequest("getfile.php"); 
    s.load(req); 

    function onStatusResonse(event:HTTPStatusEvent):void 
    { 
     var headers:Array = event.responseHeaders; 
     // iterate on headers to get the header with the filename 
    } 

    function onSoundLoaded(event:Event):void 
    { 
     var localSound:Sound = event.target as Sound; 
     localSound.play(); 
    } 

的解決方案是不正是你想要的(在發現功能onSoundLoaded文件名)是什麼,但我認爲這是最好的一段路要走。希望它有幫助

+0

好吧,這對我有用,謝謝! – user1264091 2012-04-19 12:34:12