Flashゲーム講座 & アクションスクリプトサンプル集

 

FileReference クラスについて

 


■ FileReference クラスについて

 
FileReference クラスは、ファイルに関する機能がまとまっています。
 
ブラウザ上で動作する場合、HTML と同等のセキュリティ制限があります。
 
ファイルのアップロード
 
ローカル上のファイルを、選択する事ができます。
 
選択したファイルは、アップロードする事ができます。
 
ファイルのダウンロード
 
サーバー上のファイルを、ダウンロードする事ができます。
 

■ FileReference オブジェクトを作成する

 
new 演算子を使って、FileReference クラスをインスタンス化します。
 
FileReference クラスは、ファイル1つ分に相当します。
 
new flash.net.FileReference ( ) :FileReference
引数 Voidなし
戻り値 FileReference新しい FileReference オブジェクト
 
FileReference オブジェクトを作成する (AS1.0)

// FileReference オブジェクトを作成する
var file_reference = new flash.net.FileReference();

// 出力テスト
trace(file_reference);
 
FileReference オブジェクトを作成する (AS2.0)

import flash.net.FileReference;

// FileReference オブジェクトを作成する
var file_reference:FileReference = new FileReference();

// 出力テスト
trace(file_reference);
 

■ FileReferenceList オブジェクトを作成する

 
new 演算子を使って、FileReferenceList クラスをインスタンス化します。
 
new flash.net.FileReferenceList ( ) :FileReferenceList
引数 Voidなし
戻り値 FileReferenceList新しい FileReferenceList オブジェクト
 
FileReferenceList オブジェクトを作成する (AS1.0)

// FileReferenceList オブジェクトを作成する
var file_reference_list = new flash.net.FileReferenceList();

// 出力テスト
trace(file_reference_list);
 
FileReferenceList オブジェクトを作成する (AS2.0)

import flash.net.FileReferenceList;

// FileReferenceList オブジェクトを作成する
var file_reference_list:FileReferenceList = new FileReferenceList();

// 出力テスト
trace(file_reference_list);
 


 

ファイルを選択する

 
 


■1つのファイルを選択する

 
FileReference クラスの browse() メソッドを使用します。
 
このメソッドは、非同期実行です。
 
選択結果を取得するには、イベントを使用します。
 
FileReference.browse ( [typelist] ) :Boolean
第01引数(略可)Arrayファイルフィルタのリストを指定
戻り値 Booleanファイル選択ダイアログを開くのに成功したか
 
■第01引数 (ファイルフィルタのリスト)
 
こちらで解説しています。
 
■戻り値
 
ファイル選択ダイアログを開くのに失敗した場合、false が得られます。
 
2つ以上のファイル選択ダイアログを、同時に表示する事はできません。
 
第01引数の書式に間違いがある場合、失敗します。
 
■ダイアログのセキュリティについて
 
マウスやキーボードなどの押下操作中に限って、実行する事ができます。
 
■ダイアログの操作結果を取得する
 
以下のイベントを使用します。
 
イベント 説明
onSelect ファイルを選択した場合に実行される
onCancel キャンセルした場合に実行される
 
■使用例
 
1つのファイルを選択する (AS1.0)

// ------------------------------------------------------------
// FileReference オブジェクトを作成する
// ------------------------------------------------------------
var file_reference = new flash.net.FileReference();

// ------------------------------------------------------------
// リスナー用オブジェクトを作成する
// ------------------------------------------------------------
var listener_obj = {

	// ------------------------------------------------------------
	// ファイルを選択した場合に実行されるイベント
	// ------------------------------------------------------------
	onSelect: function (fileRef){
		// 出力テスト
		trace( file_reference.name );
		trace( file_reference.size );
		trace( file_reference.type );
		trace( file_reference.creationDate );
		trace( file_reference.modificationDate );
		trace( file_reference.creator );
	},

	// ------------------------------------------------------------
	// キャンセルした場合に実行されるイベント
	// ------------------------------------------------------------
	onCancel: function (fileRef){
		trace("ファイル選択をキャンセルした");
	}
};


// ------------------------------------------------------------
// リッスンを開始する
// ------------------------------------------------------------
file_reference.addListener(listener_obj);

// ------------------------------------------------------------
// マウスボタンを押すと実行されるイベント
// ------------------------------------------------------------
_root.onMouseDown = function (){

	// ------------------------------------------------------------
	// ファイル選択ダイアログを開く
	// ------------------------------------------------------------
	var result = file_reference.browse();

	// 出力テスト
	trace(result);

};
 
1つのファイルを選択する (AS2.0)

import flash.net.FileReference;

// ------------------------------------------------------------
// FileReference オブジェクトを作成する
// ------------------------------------------------------------
var file_reference:FileReference = new FileReference();

// ------------------------------------------------------------
// リスナー用オブジェクトを作成する
// ------------------------------------------------------------
var listener_obj:Object = {

	// ------------------------------------------------------------
	// ファイルを選択した場合に実行されるイベント
	// ------------------------------------------------------------
	onSelect: function (fileRef:FileReference):Void{
		// 出力テスト
		trace( file_reference.name );
		trace( file_reference.size );
		trace( file_reference.type );
		trace( file_reference.creationDate );
		trace( file_reference.modificationDate );
		trace( file_reference.creator );
	},

	// ------------------------------------------------------------
	// キャンセルした場合に実行されるイベント
	// ------------------------------------------------------------
	onCancel: function (fileRef:FileReference):Void{
		trace("ファイル選択をキャンセルした");
	}
};


// ------------------------------------------------------------
// リッスンを開始する
// ------------------------------------------------------------
file_reference.addListener(listener_obj);

// ------------------------------------------------------------
// マウスボタンを押すと実行されるイベント
// ------------------------------------------------------------
_root.onMouseDown = function ():Void{

	// ------------------------------------------------------------
	// ファイル選択ダイアログを開く
	// ------------------------------------------------------------
	var result:Boolean = file_reference.browse();

	// 出力テスト
	trace(result);

};
 

■複数のファイルを選択する

 
FileReferenceList クラスの browse() メソッドを使用します。
 
このメソッドは、非同期実行です。
 
選択結果を取得するには、イベントを使用します。
 
FileReferenceList.browse ( [typelist] ) :Boolean
第01引数(略可)Arrayファイルフィルタのリストを指定
戻り値 Booleanファイル選択ダイアログを開くのに成功したか
 
■第01引数 (ファイルフィルタのリスト)
 
こちらで解説しています。
 
■戻り値
 
ファイル選択ダイアログを開くのに失敗した場合、false が得られます。
 
2つ以上のファイル選択ダイアログを、同時に表示する事はできません。
 
第01引数の書式に間違いがある場合、失敗します。
 
■ダイアログのセキュリティについて
 
マウスやキーボードなどの押下操作中に限って、実行する事ができます。
 
■ダイアログの操作結果を取得する
 
以下のイベントを使用します。
 
イベント 説明
onSelect ファイルを選択した場合に実行される
onCancel キャンセルした場合に実行される
 
■選択したファイルのリストを取得する
 
fileList プロパティを使用します。配列が得られます。
 
中身は、FileReference オブジェクトです。
 
■使用例
 
複数のファイルを選択する (AS1.0)

// ------------------------------------------------------------
// FileReferenceList オブジェクトを作成する
// ------------------------------------------------------------
var file_reference_list = new flash.net.FileReferenceList();

// ------------------------------------------------------------
// リスナー用オブジェクトを作成する
// ------------------------------------------------------------
var listener_obj = {

	// ------------------------------------------------------------
	// ファイルを選択した場合に実行されるイベント
	// ------------------------------------------------------------
	onSelect: function (fileRefList){

		// 選択したファイルのリストを取得する
		var file_list = file_reference_list.fileList;

		// 総数
		var num = file_list.length;

		var i;
		for(i=0;i < num;i++){

			// FileReference オブジェクトを取得
			var file_reference = file_list[i];

			// 出力テスト
			trace( file_reference.name );
			trace( file_reference.size );
			trace( file_reference.type );
			trace( file_reference.creationDate );
			trace( file_reference.modificationDate );
			trace( file_reference.creator );

		}
	},

	// ------------------------------------------------------------
	// キャンセルした場合に実行されるイベント
	// ------------------------------------------------------------
	onCancel: function (fileRefList){
		trace("ファイル選択をキャンセルした");
	}
};


// ------------------------------------------------------------
// リッスンを開始する
// ------------------------------------------------------------
file_reference_list.addListener(listener_obj);

// ------------------------------------------------------------
// マウスボタンを押すと実行されるイベント
// ------------------------------------------------------------
_root.onMouseDown = function (){

	// ------------------------------------------------------------
	// ファイル選択ダイアログを開く(複数選択)
	// ------------------------------------------------------------
	var result = file_reference_list.browse();

	// 出力テスト
	trace(result);

};
 
複数のファイルを選択する (AS2.0)

import flash.net.FileReference;
import flash.net.FileReferenceList;

// ------------------------------------------------------------
// FileReferenceList オブジェクトを作成する
// ------------------------------------------------------------
var file_reference_list:FileReferenceList = new FileReferenceList();

// ------------------------------------------------------------
// リスナー用オブジェクトを作成する
// ------------------------------------------------------------
var listener_obj:Object = {

	// ------------------------------------------------------------
	// ファイルを選択した場合に実行されるイベント
	// ------------------------------------------------------------
	onSelect: function (fileRefList:FileReferenceList):Void{

		// 選択したファイルのリストを取得する
		var file_list:Array = file_reference_list.fileList;

		// 総数
		var num:Number = file_list.length;

		var i:Number;
		for(i=0;i < num;i++){

			// FileReference オブジェクトを取得
			var file_reference:FileReference = file_list[i];

			// 出力テスト
			trace( file_reference.name );
			trace( file_reference.size );
			trace( file_reference.type );
			trace( file_reference.creationDate );
			trace( file_reference.modificationDate );
			trace( file_reference.creator );

		}
	},

	// ------------------------------------------------------------
	// キャンセルした場合に実行されるイベント
	// ------------------------------------------------------------
	onCancel: function (fileRefList:FileReferenceList):Void{
		trace("ファイル選択をキャンセルした");
	}
};


// ------------------------------------------------------------
// リッスンを開始する
// ------------------------------------------------------------
file_reference_list.addListener(listener_obj);

// ------------------------------------------------------------
// マウスボタンを押すと実行されるイベント
// ------------------------------------------------------------
_root.onMouseDown = function ():Void{

	// ------------------------------------------------------------
	// ファイル選択ダイアログを開く(複数選択)
	// ------------------------------------------------------------
	var result:Boolean = file_reference_list.browse();

	// 出力テスト
	trace(result);

};
 

■ファイル情報を取得する

 
ファイルを選択すると、以下のプロパティからファイル情報が得られます。
 
ActionScript1.0~2.0 では、ファイルの中身を読み取る事はできません。
 
プロパティ名説明
nameStringファイル名
sizeNumberサイズ
typeStringファイル形式
creationDateDate作成日
modificationDateDate最終更新日
creatorStringクリエータタイプ(Macintosh)
 

■ファイル選択のフィルタについて

 
オブジェクトを作成して、以下のプロパティを追加します。
 
プロパティ名説明
descriptionString説明文
extensionString拡張子のリスト。『 *.拡張子 』と記述。
複数記述する場合はセミコロン ; で挟む
macTypeStringMacintosh ファイルタイプのリスト(省略可能)
複数記述する場合はセミコロン ; で挟む
 
フィルタを指定して、ファイル選択ダイアログを開く (AS2.0)

import flash.net.FileReference;

// ------------------------------------------------------------
// FileReference オブジェクトを作成する
// ------------------------------------------------------------
var file_reference:FileReference = new FileReference();

// ------------------------------------------------------------
// ファイルフィルタリスト用のオブジェクトを作成する
// ------------------------------------------------------------
var file_filter_list:Array = new Array();

// ------------------------------------------------------------
// ファイルフィルタを追加する
// ------------------------------------------------------------
file_filter_list.push({
	description: "画像ファイル",
	extension: "*.bmp;*.gif;*.jpg;*.png"
});

file_filter_list.push({
	description: "サウンドファイル",
	extension: "*.wav;*.mp3"
});

file_filter_list.push({
	description: "動画ファイル",
	extension: "*.avi;*.mp4;*.flv"
});

// ------------------------------------------------------------
// ファイル選択ダイアログを開く
// ------------------------------------------------------------
file_reference.browse( file_filter_list );
 


 

ファイルをアップロードする

 
 


■アップロードの仕様について

 
リクエストの形式について
 
リクエストのメソッドは、POST となります。
 
リクエストのコンテンツタイプは、multipart/form-data 形式です。
 
送信データについて
 
ファイルの name 属性は、"Filedata" です。
 
1度に、複数のファイルを送信する事はできません。
 
ファイルの送信と同時に、任意のデータも送信できます。
 
この場合、postData プロパティを使用します。
 
レスポンスについて
 
レスポンスボディなどを取得する事はできません。
 
リクエストに成功したかのみ、判別できます。
 
サーバー側(CGI)の実装について
 
こちらで解説しています。
 
HTML によるアップロードについては、こちらで解説しています。
 

■送信データを指定する (Flash Player 9 以降)

 
postData プロパティを使用します。
 
x-www-form-urlencoded 文字列を指定します。
 
Flash Player 9 以降の環境で動作します。
 
Macromedia Flash 8 の場合、配列アクセス演算子を使って、コンパイルエラーを回避します。
 
送信データを指定する (AS1.0)

// ------------------------------------------------------------
// FileReference オブジェクトを作成する
// ------------------------------------------------------------
var file_reference = new flash.net.FileReference();

// ------------------------------------------------------------
// LoadVars オブジェクトを作成する
// ------------------------------------------------------------
var load_vars = new LoadVars();

// ------------------------------------------------------------
// 「名前と値情報」を追加する
// ------------------------------------------------------------
load_vars["user"] = "taro";
load_vars["age"] = "18";
load_vars["blood"] = "b";

// ------------------------------------------------------------
// 「連想配列」から「x-www-form-urlencoded 文字列」に変換する
// ------------------------------------------------------------
var url_encoded = load_vars.toString();

// 出力テスト
trace(url_encoded); // "user=taro&age=18&blood=b"

// ------------------------------------------------------------
// 送信データを指定する
// ------------------------------------------------------------
file_reference["postData"] = url_encoded;
 
送信データを指定する (AS2.0)

import flash.net.FileReference;

// ------------------------------------------------------------
// FileReference オブジェクトを作成する
// ------------------------------------------------------------
var file_reference:FileReference = new FileReference();

// ------------------------------------------------------------
// LoadVars オブジェクトを作成する
// ------------------------------------------------------------
var load_vars:LoadVars = new LoadVars();

// ------------------------------------------------------------
// 「名前と値情報」を追加する
// ------------------------------------------------------------
load_vars["user"] = "taro";
load_vars["age"] = "18";
load_vars["blood"] = "b";

// ------------------------------------------------------------
// 「連想配列」から「x-www-form-urlencoded 文字列」に変換する
// ------------------------------------------------------------
var url_encoded:String = load_vars.toString();

// 出力テスト
trace(url_encoded); // "user=taro&age=18&blood=b"

// ------------------------------------------------------------
// 送信データを指定する
// ------------------------------------------------------------
file_reference["postData"] = url_encoded;
 

■アップロードを開始する

 
1.ファイルを選択する
 
こちらで解説しています。
 
アップロードできるのは、ユーザーが選択(許可)したファイルのみです。
 
2.アップロードを開始する
 
upload() メソッドを使用します。
 
このメソッドは、非同期実行です。
 
HTTP 通信の結果を得るには、イベントを使用します。
 
FileReference.upload ( "URL" ) :Boolean
第01引数 Stringアップロード先の URL を指定
戻り値 BooleanHTTP 通信の開始に成功したか?
 
■ブラウザを使って通信内容を確認する
 
ブラウザの開発者向けツールを使用すると、通信内容を確認する事ができます。
 
使用方法は、こちらで解説しています。
 

■アップロード結果を取得する

 
■ HTTP 通信の進捗状況を取得する
 
イベント 説明
onOpen (1) HTTP 通信を開始した
onProgress (2) リクエストボディを送信中
 
■ HTTP 通信の完了を取得する
 
以下の4つのイベントは、同時に発行されることはありません。
 
よって1つでも欠けている場合、通信の完了を取りこぼします。
 
イベント 説明
onComplete アップロード成功(HTTP通信は成功、リクエストも成功)
onHTTPError アップロード失敗(HTTP通信は成功、リクエストは失敗)
onIOError アップロード失敗(HTTP通信の失敗、原因は入出力エラー)
onSecurityError アップロード失敗(HTTP通信の失敗、原因はセキュリティ)
 
■使用例
 
ファイルを送信し、結果を取得する (AS1.0)

// ------------------------------------------------------------
// テキストフィールドを作成
// ------------------------------------------------------------
_root.createTextField( "text_field" , 0 , 10 ,  10 , Stage.width-20 , Stage.height-20 );

// テキストフィールドの参照を取得
var text_field = _root.text_field;

// 枠線を表示
text_field.border = true;

// ------------------------------------------------------------
// FileReference オブジェクトを作成する
// ------------------------------------------------------------
var file_reference = new flash.net.FileReference();

// ------------------------------------------------------------
// リスナー用オブジェクトを作成する(ファイル選択関連)
// ------------------------------------------------------------
var listener_browse = {

	// ------------------------------------------------------------
	// ファイルを選択した場合に実行されるイベント
	// ------------------------------------------------------------
	onSelect: function (fileRef){

		// ------------------------------------------------------------
		// 追加の送信データを指定する
		// ------------------------------------------------------------
		// LoadVars オブジェクトを作成する
		var load_vars = new LoadVars();

		// 「名前と値情報」を追加する
		load_vars["user"] = "taro";
		load_vars["age"] = "18";
		load_vars["blood"] = "b";

		// 送信データを指定する
		file_reference["postData"] = load_vars.toString();

		// ------------------------------------------------------------
		// アップロードを開始する
		// ------------------------------------------------------------
		var result = file_reference.upload( "http://example.com/cgi-bin/upload.cgi" );

		text_field.text = "アップロード開始 (result:" + (result) + ")\n" + text_field.text;

	},

	// ------------------------------------------------------------
	// キャンセルした場合に実行されるイベント
	// ------------------------------------------------------------
	onCancel: function (fileRef){
		text_field.text = "ファイル選択をキャンセルした\n" + text_field.text;
	}

};

// ------------------------------------------------------------
// リスナー用オブジェクトを作成する(アップロード関連)
// ------------------------------------------------------------
var listener_upload = {

	// ------------------------------------------------------------
	// HTTP 通信を開始すると実行されるイベント
	// ------------------------------------------------------------
	onOpen: function (fileRef){
		text_field.text = "HTTP 通信を開始した\n" + text_field.text;
	},

	// ------------------------------------------------------------
	// 送信中に繰り返し実行されるイベント
	// ------------------------------------------------------------
	onProgress: function (fileRef , bytesLoaded , bytesTotal){

		// パーセント
		var percent = bytesLoaded / bytesTotal * 100;

		text_field.text = "送信中 (loaded:" + (bytesLoaded) + " total:" + (bytesTotal) + " percent:" + (percent) + ")\n" + text_field.text;
	},

	// ------------------------------------------------------------
	// アップロードが成功すると実行されるイベント
	// ------------------------------------------------------------
	onComplete: function (fileRef){
		text_field.text = "アップロード成功、リクエストの成功\n" + text_field.text;
	},

	// ------------------------------------------------------------
	// リクエストが失敗すると実行されるイベント
	// ------------------------------------------------------------
	onHTTPError: function (fileRef , httpError){
		text_field.text = "アップロード失敗、リクエストの失敗 (status:" + (httpError) + ")\n" + text_field.text;
	},

	// ------------------------------------------------------------
	// 入出力エラーが発生すると実行されるイベント
	// ------------------------------------------------------------
	onIOError: function (fileRef){
		text_field.text = "アップロード失敗、入出力エラー\n" + text_field.text;
	},

	// ------------------------------------------------------------
	// セキュリティエラーが発生すると実行されるイベント
	// ------------------------------------------------------------
	onSecurityError: function (fileRef , errorString){
		text_field.text = "アップロード失敗、セキュリティエラー (message:" + (errorString) + ")\n" + text_field.text;
	}
};

// ------------------------------------------------------------
// リッスンを開始する
// ------------------------------------------------------------
file_reference.addListener(listener_browse);
file_reference.addListener(listener_upload);

// ------------------------------------------------------------
// マウスボタンを押すと実行されるイベント
// ------------------------------------------------------------
_root.onMouseDown = function (){

	// ------------------------------------------------------------
	// ファイル選択ダイアログを開く
	// ------------------------------------------------------------
	var result = file_reference.browse();

	text_field.text = "ファイル選択の開始 (result:" + (result) + ")\n" + text_field.text;

};
 
ファイルを送信し、結果を取得する (AS2.0)

import flash.net.FileReference;

// ------------------------------------------------------------
// テキストフィールドを作成
// ------------------------------------------------------------
_root.createTextField( "text_field" , 0 , 10 ,  10 , Stage.width-20 , Stage.height-20 );

// テキストフィールドの参照を取得
var text_field:TextField = _root.text_field;

// 枠線を表示
text_field.border = true;

// ------------------------------------------------------------
// FileReference オブジェクトを作成する
// ------------------------------------------------------------
var file_reference:FileReference = new FileReference();

// ------------------------------------------------------------
// リスナー用オブジェクトを作成する(ファイル選択関連)
// ------------------------------------------------------------
var listener_browse:Object = {

	// ------------------------------------------------------------
	// ファイルを選択した場合に実行されるイベント
	// ------------------------------------------------------------
	onSelect: function (fileRef:FileReference):Void{

		// ------------------------------------------------------------
		// 追加の送信データを指定する
		// ------------------------------------------------------------
		// LoadVars オブジェクトを作成する
		var load_vars:LoadVars = new LoadVars();

		// 「名前と値情報」を追加する
		load_vars["user"] = "taro";
		load_vars["age"] = "18";
		load_vars["blood"] = "b";

		// 送信データを指定する
		file_reference["postData"] = load_vars.toString();

		// ------------------------------------------------------------
		// アップロードを開始する
		// ------------------------------------------------------------
		var result:Boolean = file_reference.upload( "http://example.com/cgi-bin/upload.cgi" );

		text_field.text = "アップロード開始 (result:" + (result) + ")\n" + text_field.text;

	},

	// ------------------------------------------------------------
	// キャンセルした場合に実行されるイベント
	// ------------------------------------------------------------
	onCancel: function (fileRef:FileReference):Void{
		text_field.text = "ファイル選択をキャンセルした\n" + text_field.text;
	}

};

// ------------------------------------------------------------
// リスナー用オブジェクトを作成する(アップロード関連)
// ------------------------------------------------------------
var listener_upload:Object = {

	// ------------------------------------------------------------
	// HTTP 通信を開始すると実行されるイベント
	// ------------------------------------------------------------
	onOpen: function (fileRef:FileReference):Void{
		text_field.text = "HTTP 通信を開始した\n" + text_field.text;
	},

	// ------------------------------------------------------------
	// 送信中に繰り返し実行されるイベント
	// ------------------------------------------------------------
	onProgress: function (fileRef:FileReference , bytesLoaded:Number , bytesTotal:Number):Void{

		// パーセント
		var percent:Number = bytesLoaded / bytesTotal * 100;

		text_field.text = "送信中 (loaded:" + (bytesLoaded) + " total:" + (bytesTotal) + " percent:" + (percent) + ")\n" + text_field.text;
	},

	// ------------------------------------------------------------
	// アップロードが成功すると実行されるイベント
	// ------------------------------------------------------------
	onComplete: function (fileRef:FileReference):Void{
		text_field.text = "アップロード成功、リクエストの成功\n" + text_field.text;
	},

	// ------------------------------------------------------------
	// リクエストが失敗すると実行されるイベント
	// ------------------------------------------------------------
	onHTTPError: function (fileRef:FileReference , httpError:Number):Void{
		text_field.text = "アップロード失敗、リクエストの失敗 (status:" + (httpError) + ")\n" + text_field.text;
	},

	// ------------------------------------------------------------
	// 入出力エラーが発生すると実行されるイベント
	// ------------------------------------------------------------
	onIOError: function (fileRef:FileReference):Void{
		text_field.text = "アップロード失敗、入出力エラー\n" + text_field.text;
	},

	// ------------------------------------------------------------
	// セキュリティエラーが発生すると実行されるイベント
	// ------------------------------------------------------------
	onSecurityError: function (fileRef:FileReference , errorString:String):Void{
		text_field.text = "アップロード失敗、セキュリティエラー (message:" + (errorString) + ")\n" + text_field.text;
	}
};

// ------------------------------------------------------------
// リッスンを開始する
// ------------------------------------------------------------
file_reference.addListener(listener_browse);
file_reference.addListener(listener_upload);

// ------------------------------------------------------------
// マウスボタンを押すと実行されるイベント
// ------------------------------------------------------------
_root.onMouseDown = function ():Void{

	// ------------------------------------------------------------
	// ファイル選択ダイアログを開く
	// ------------------------------------------------------------
	var result:Boolean = file_reference.browse();

	text_field.text = "ファイル選択の開始 (result:" + (result) + ")\n" + text_field.text;

};
 

■アップロードのセキュリティについて

 
■クロスドメインポリシーによる制限
 
別ドメインのサーバーと、HTTP 通信を行う事はできません。
 
クロスドメインポリシーは、解除できます。
 
■クロスドメインポリシーの解除について
 
サーバー側に、クロスドメインポリシーファイルを設置します。
 
■ Flash 側の処理について
 
もしサブフォルダにポリシーファイルが設置されている場合、事前に loadPolicyFile() メソッドを実行します。
 
マスターポリシーファイルに限っては、自動的に読み込まれます。
 
マスターポリシーファイルにて解決する場合、loadPolicyFile() メソッドは不要です。
 


 

ファイルをダウンロードする

 
 


■ダウンロードの仕様について

 
リクエストについて
 
任意のデータを送信できます。
 
postData プロパティを使用します。
 
この場合、リクエストのメソッドは、POST となります。
 
コンテンツタイプは、application/x-www-form-urlencoded 形式です。
 
ダウンロードの注意点
 
ダウンロード処理は、Flash Player が行います。
 
ダウンロード中は、Flash が動作し続けている必要があります。
 
もし、Flash Player が消滅した場合、ダウンロードは失敗します。
 
JavaScript を使って、ページの遷移時に警告を表示する事ができます。
 
こちらで解説しています。
 
レスポンスについて
 
ダウンロードが完了すると、保存ファイルを選択している状態となります。
 
ファイルの情報を取得できます。
 
レスポンスヘッダなどを取得する事はできません。
 

■ダウンロードを開始する

 
download() メソッドを使用します。
 
このメソッドは、非同期実行です。
 
呼び出すと、ファイル保存ダイアログが開かれます。
 
ファイル保存操作を行うと、すぐに HTTP 通信が開始されます。
 
ダウンロードの結果を得るには、イベントを使用します。
 
FileReference.download ( "URL" , "defaultFileName" ) :Boolean
第01引数 Stringダウンロードしたいファイルの URL を指定
第02引数(略可)String保存する際のデフォルトのファイル名を指定
戻り値 Booleanファイル保存ダイアログの表示に成功したか?
 
■戻り値
 
ファイル保存ダイアログを開くのに失敗した場合、false が得られます。
 
2つ以上のファイル保存ダイアログを、同時に表示する事はできません。
 
■ダイアログのセキュリティについて
 
マウスやキーボードなどの押下操作中に限って、実行する事ができます。
 
■ダイアログの操作結果を取得する
 
以下のイベントを使用します。
 
イベント 説明
onSelect ファイルを保存操作した場合に実行される
onCancel キャンセルした場合に実行される
 
■ブラウザを使って通信内容を確認する
 
ブラウザの開発者向けツールを使用すると、通信内容を確認する事ができます。
 
使用方法は、こちらで解説しています。
 

■ダウンロード結果を取得する

 
■ HTTP 通信の進捗状況を取得する
 
イベント 説明
onOpen (1) HTTP 通信を開始した
onProgress (2) レスポンスボディを受信中
 
■ HTTP 通信の完了を取得する
 
以下の3つのイベントは、同時に発行されることはありません。
 
よって1つでも欠けている場合、通信の完了を取りこぼします。
 
onHTTPError イベントは、ダウンロード時には発行されません。
 
イベント 説明
onComplete ダウンロード成功(リクエストも成功)
onIOError ダウンロード失敗
onSecurityError ダウンロード失敗(原因はセキュリティ)
 
■使用例
 
ファイルをダウンロードして保存する (AS1.0)

// ------------------------------------------------------------
// テキストフィールドを作成
// ------------------------------------------------------------
_root.createTextField( "text_field" , 0 , 10 ,  10 , Stage.width-20 , Stage.height-20 );

// テキストフィールドの参照を取得
var text_field = _root.text_field;

// 枠線を表示
text_field.border = true;

// ------------------------------------------------------------
// FileReference オブジェクトを作成する
// ------------------------------------------------------------
var file_reference = new flash.net.FileReference();

// ------------------------------------------------------------
// リスナー用オブジェクトを作成する(ファイル保存関連)
// ------------------------------------------------------------
var listener_save = {

	// ------------------------------------------------------------
	// ファイルを保存操作した場合に実行されるイベント
	// ------------------------------------------------------------
	onSelect: function (fileRef){
		text_field.text = "ファイルを保存操作した\n" + text_field.text;
	},

	// ------------------------------------------------------------
	// キャンセルした場合に実行されるイベント
	// ------------------------------------------------------------
	onCancel: function (fileRef){
		text_field.text = "ファイル保存をキャンセルした\n" + text_field.text;
	}

};

// ------------------------------------------------------------
// リスナー用オブジェクトを作成する(ダウンロード関連)
// ------------------------------------------------------------
var listener_download = {

	// ------------------------------------------------------------
	// HTTP 通信を開始すると実行されるイベント
	// ------------------------------------------------------------
	onOpen: function (fileRef){
		text_field.text = "HTTP 通信を開始した\n" + text_field.text;
	},

	// ------------------------------------------------------------
	// 受信中に繰り返し実行されるイベント
	// ------------------------------------------------------------
	onProgress: function (fileRef , bytesLoaded , bytesTotal){

		// パーセント
		var percent = bytesLoaded / bytesTotal * 100;

		text_field.text = "受信中 (loaded:" + (bytesLoaded) + " total:" + (bytesTotal) + " percent:" + (percent) + ")\n" + text_field.text;
	},

	// ------------------------------------------------------------
	// ダウンロードが成功すると実行されるイベント
	// ------------------------------------------------------------
	onComplete: function (fileRef){
		text_field.text = "ダウンロード成功\n" + text_field.text;
	},

	// ------------------------------------------------------------
	// ダウンロードが失敗すると実行されるイベント
	// ------------------------------------------------------------
	onIOError: function (fileRef){
		text_field.text = "ダウンロード失敗\n" + text_field.text;
	},

	// ------------------------------------------------------------
	// セキュリティエラーが発生すると実行されるイベント
	// ------------------------------------------------------------
	onSecurityError: function (fileRef , errorString){
		text_field.text = "ダウンロード失敗、セキュリティエラー (message:" + (errorString) + ")\n" + text_field.text;
	}
};

// ------------------------------------------------------------
// リッスンを開始する
// ------------------------------------------------------------
file_reference.addListener(listener_save);
file_reference.addListener(listener_download);

// ------------------------------------------------------------
// マウスボタンを押すと実行されるイベント
// ------------------------------------------------------------
_root.onMouseDown = function (){

	// ------------------------------------------------------------
	// 送信データを指定する
	// ------------------------------------------------------------
	// LoadVars オブジェクトを作成する
	var load_vars = new LoadVars();

	// 「名前と値情報」を追加する
	load_vars["user"] = "taro";
	load_vars["age"] = "18";
	load_vars["blood"] = "b";

	// 送信データを指定する
	file_reference["postData"] = load_vars.toString();

	// ------------------------------------------------------------
	// ダウンロードを開始する
	// ------------------------------------------------------------
	var result = file_reference.download( "http://example.com/download/binary.dat" , "defaultName.dat" );

	text_field.text = "ファイル保存の開始 (result:" + (result) + ")\n" + text_field.text;

};
 
ファイルをダウンロードして保存する (AS2.0)

import flash.net.FileReference;

// ------------------------------------------------------------
// テキストフィールドを作成
// ------------------------------------------------------------
_root.createTextField( "text_field" , 0 , 10 ,  10 , Stage.width-20 , Stage.height-20 );

// テキストフィールドの参照を取得
var text_field:TextField = _root.text_field;

// 枠線を表示
text_field.border = true;

// ------------------------------------------------------------
// FileReference オブジェクトを作成する
// ------------------------------------------------------------
var file_reference:FileReference = new FileReference();

// ------------------------------------------------------------
// リスナー用オブジェクトを作成する(ファイル保存関連)
// ------------------------------------------------------------
var listener_save:Object = {

	// ------------------------------------------------------------
	// ファイルを保存操作した場合に実行されるイベント
	// ------------------------------------------------------------
	onSelect: function (fileRef:FileReference):Void{
		text_field.text = "ファイルを保存操作した\n" + text_field.text;
	},

	// ------------------------------------------------------------
	// キャンセルした場合に実行されるイベント
	// ------------------------------------------------------------
	onCancel: function (fileRef:FileReference):Void{
		text_field.text = "ファイル保存をキャンセルした\n" + text_field.text;
	}

};

// ------------------------------------------------------------
// リスナー用オブジェクトを作成する(ダウンロード関連)
// ------------------------------------------------------------
var listener_download:Object = {

	// ------------------------------------------------------------
	// HTTP 通信を開始すると実行されるイベント
	// ------------------------------------------------------------
	onOpen: function (fileRef:FileReference):Void{
		text_field.text = "HTTP 通信を開始した\n" + text_field.text;
	},

	// ------------------------------------------------------------
	// 受信中に繰り返し実行されるイベント
	// ------------------------------------------------------------
	onProgress: function (fileRef:FileReference , bytesLoaded:Number , bytesTotal:Number):Void{

		// パーセント
		var percent:Number = bytesLoaded / bytesTotal * 100;

		text_field.text = "受信中 (loaded:" + (bytesLoaded) + " total:" + (bytesTotal) + " percent:" + (percent) + ")\n" + text_field.text;
	},

	// ------------------------------------------------------------
	// ダウンロードが成功すると実行されるイベント
	// ------------------------------------------------------------
	onComplete: function (fileRef:FileReference):Void{
		text_field.text = "ダウンロード成功\n" + text_field.text;
	},

	// ------------------------------------------------------------
	// ダウンロードが失敗すると実行されるイベント
	// ------------------------------------------------------------
	onIOError: function (fileRef:FileReference):Void{
		text_field.text = "ダウンロード失敗\n" + text_field.text;
	},

	// ------------------------------------------------------------
	// セキュリティエラーが発生すると実行されるイベント
	// ------------------------------------------------------------
	onSecurityError: function (fileRef:FileReference , errorString:String):Void{
		text_field.text = "ダウンロード失敗、セキュリティエラー (message:" + (errorString) + ")\n" + text_field.text;
	}
};

// ------------------------------------------------------------
// リッスンを開始する
// ------------------------------------------------------------
file_reference.addListener(listener_save);
file_reference.addListener(listener_download);

// ------------------------------------------------------------
// マウスボタンを押すと実行されるイベント
// ------------------------------------------------------------
_root.onMouseDown = function ():Void{

	// ------------------------------------------------------------
	// 送信データを指定する
	// ------------------------------------------------------------
	// LoadVars オブジェクトを作成する
	var load_vars:LoadVars = new LoadVars();

	// 「名前と値情報」を追加する
	load_vars["user"] = "taro";
	load_vars["age"] = "18";
	load_vars["blood"] = "b";

	// 送信データを指定する
	file_reference["postData"] = load_vars.toString();

	// ------------------------------------------------------------
	// ダウンロードを開始する
	// ------------------------------------------------------------
	var result:Boolean = file_reference.download( "http://example.com/download/binary.dat" , "defaultName.dat" );

	text_field.text = "ファイル保存の開始 (result:" + (result) + ")\n" + text_field.text;

};
 

■ダウンロードのセキュリティについて

 
■クロスドメインポリシーによる制限
 
別ドメインのサーバーと、HTTP 通信を行う事はできません。
 
クロスドメインポリシーは、解除できます。
 
■クロスドメインポリシーの解除について
 
サーバー側に、クロスドメインポリシーファイルを設置します。
 
■ Flash 側の処理について
 
もしサブフォルダにポリシーファイルが設置されている場合、事前に loadPolicyFile() メソッドを実行します。
 
マスターポリシーファイルに限っては、自動的に読み込まれます。
 
マスターポリシーファイルにて解決する場合、loadPolicyFile() メソッドは不要です。