これはdirectly from the docsです:
package {
import flash.display.Sprite;
import flash.events.*;
import flash.net.FileReference;
import flash.net.URLRequest;
import flash.net.FileFilter;
public class FileReference_download extends Sprite {
private var downloadURL:URLRequest;
private var fileName:String = "SomeFile.pdf";
private var file:FileReference;
public function FileReference_download() {
downloadURL = new URLRequest();
downloadURL.url = "http://www.[yourDomain].com/SomeFile.pdf";
file = new FileReference();
configureListeners(file);
file.download(downloadURL, fileName);
}
private function configureListeners(dispatcher:IEventDispatcher):void {
dispatcher.addEventListener(Event.CANCEL, cancelHandler);
dispatcher.addEventListener(Event.COMPLETE, completeHandler);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
dispatcher.addEventListener(Event.OPEN, openHandler);
dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
dispatcher.addEventListener(Event.SELECT, selectHandler);
}
private function cancelHandler(event:Event):void {
trace("cancelHandler: " + event);
}
private function completeHandler(event:Event):void {
trace("completeHandler: " + event);
}
private function ioErrorHandler(event:IOErrorEvent):void {
trace("ioErrorHandler: " + event);
}
private function openHandler(event:Event):void {
trace("openHandler: " + event);
}
private function progressHandler(event:ProgressEvent):void {
var file:FileReference = FileReference(event.target);
trace("progressHandler name=" + file.name + " bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal);
}
private function securityErrorHandler(event:SecurityErrorEvent):void {
trace("securityErrorHandler: " + event);
}
private function selectHandler(event:Event):void {
var file:FileReference = FileReference(event.target);
trace("selectHandler: name=" + file.name + " URL=" + downloadURL.url);
}
}
}
EDITは:ユーザー(クリック)のアクションが必要な場合がありますので、この方法を使用している場合、これは動作しませんでした。そのため、コンストラクタに含まれるコードをメソッド(クリックハンドラ)に移動する必要があります。もちろん、この場合btn
はステージに配置されたムービークリップのインスタンス名で、FileReference_download
はDocumentClassです。
public function FileReference_download() {
btn.addEventListener(MouseEvent.MOUSE_DOWN, downloadMyFile);
}
private function downloadMyFile(e:MouseEvent){
downloadURL = new URLRequest();
downloadURL.url = "http://www.[yourDomain].com/SomeFile.pdf";
file = new FileReference();
configureListeners(file);
file.download(downloadURL, fileName);
}
なぜAS3でのみ必要ですか?ブラウザへのmp3ファイルを提供するサーバのサイドページへの単純なnavigateToURLは十分ではないでしょうか? – ToddBFisher
ブラウザにmp3ファイルを直接再生するブラウザで利用できるプラグインがいくつかありますが、私はそれを望んでいません..........私はPHPを試しましたが、http://stackoverflow.com/questionsのいくつかの問題/ 8458449/issues-with-force-download-in-php – hardik
あなたはPHPでそれをやっているはずです。レスポンスヘッダーにはcontent-disposition:attachmentが付きますが、ブラウザプラグインがある場合は、そのプラグインをバイパスすることはできません。 –