よんちゅBlog

― このブログは自分用のメモや日々の問題などを共有するためのものです ―

20121005185841 お知らせ:  2013/07/17 ブログデザインをリニューアルしました。

Flexでファイルをダウンロードさせる方法。

今回はFlexのダウンロード機能を使う方法を示します。

import flash.net.FileReference;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;
import mx.core.Application;
import mx.utils.URLUtil;

public class Downloader {
	private static const URL_VAR_FILE_PATH:String = "filePath";
	/**
	 * ダウンロードを行う.
	 * @param filePath:String ダウンロード対象のファイルパス
	 * */
	public function downloadByFileRef(filePath:String):void {
		var req:URLRequest = new URLRequest();
		
		// サーバ名取得
		var serverName:String = URLUtil.getServerName( Application.application.url );
		// ダウンロードのリクエスト先URL
		req.url = "http://" + serverName + "/test/download";
		// リクエスト方法にPOSTを指定
		req.method = URLRequestMethod.POST;
		
		// URL変数
		var uv:URLVariables = new URLVariables();
		// POSTデータ設定 - ダウンロードするファイルのパスを渡す
		uv[URL_VAR_FILE_PATH] = filePath;
		req.data = uv;

		// ダウンロード開始
		var fileRef:FileReference = new FileReference();
		fileRef.download(req, filePath);
	}
}


ダウンロードするだけならこれだけOK。
ダウンロードが完了すると自動的にファイルを保存するダイアログが表示されます。

ただし、この方法の場合ダウンロードの進捗状況はFlex側で実装しなければなりません。
これは"mx.controls.ProgressBar"というクラスを使用することで実現できます。
また、ダウンロード中にFlashがクラッシュしたり、別のページに移動するとダウンロードがキャンセルされてしまいます。

次回はFlexからブラウザのダウンロード機能を使用してダウンロードさせる方法を書こうと思います。