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

この問題を解決する方法は、Soundクラスを使用する代わりに、URLLoaderhttp://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/URLLoader.htmlを使用してデータをロードすることですこれは、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 に答える