0

我加载外部声音的 as3 代码:

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 响应中获取实际的文件名返回?

4

1 回答 1

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 函数中查找文件名),但我认为这是最好的方法。希望能帮助到你

于 2012-04-16T16:22:50.183 回答