FileReference クラスについて (Flash 8 以降)
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 では、ファイルの中身を読み取る事はできません。
プロパティ名 | 型 | 説明 |
name | String | ファイル名 |
size | Number | サイズ |
type | String | ファイル形式 |
creationDate | Date | 作成日 |
modificationDate | Date | 最終更新日 |
creator | String | クリエータタイプ(Macintosh) |
■ファイル選択のフィルタについて
オブジェクトを作成して、以下のプロパティを追加します。
プロパティ名 | 型 | 説明 |
description | String | 説明文 |
extension | String | 拡張子のリスト。『 *.拡張子 』と記述。 複数記述する場合はセミコロン ; で挟む |
macType | String | Macintosh ファイルタイプのリスト(省略可能) 複数記述する場合はセミコロン ; で挟む |
フィルタを指定して、ファイル選択ダイアログを開く (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)の実装について
■送信データを指定する (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() メソッドを使用します。
FileReference.upload ( "URL" ) :Boolean
第01引数 | String | アップロード先の URL を指定 |
戻り値 | Boolean | HTTP 通信の開始に成功したか? |
■ブラウザを使って通信内容を確認する
ブラウザの開発者向けツールを使用すると、通信内容を確認する事ができます。
使用方法は、こちらで解説しています。
■アップロード結果を取得する
■ 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() メソッドを実行します。
ファイルをダウンロードする
■ダウンロードの仕様について
リクエストについて
任意のデータを送信できます。
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() メソッドを実行します。