FileReferenceクラスを使ってみるよ。
アップロードできるかな?
要 Flash Player 8 以上
アップロードするファイル名は
英数字のみで。また「,」も含めちゃダメ。
FileReferenceを使ってみる (3) 参照。
_root にムービークリップ(インスタンス名: uploadBtn, fileBtn) を配置。
_root 第1フレームに
import flash.net.FileReference;
var fileRef:FileReference = new FileReference();
var fileListener:Object = new Object();
fileListener.onSelect = function(file:FileReference):Void {
// 参照・保存ダイアログで開く・保存を選択したときの処理
};
fileListener.onCancel = function(file:FileReference):Void {
// 参照・保存ダイアログでキャンセルを選択したときの処理
};
fileListener.onOpen = function(file:FileReference):Void {
// アップロード開始時の処理
trace(file.size);
};
fileListener.onProgress = function(file:FileReference, nLoadedBytes:Number, nTotalBytes:Number):Void {
// アップロード中の処理
};
fileListener.onComplete = function(file:FileReference):Void {
// アップロード完了時の処理
};
fileListener.onHTTPError = function(file:FileReference, error:Number):Void {
// HTTPエラーでアップロード失敗時の処理
};
fileListener.onIOError = function(file:FileReference):Void {
// 入出力エラーでアップロード失敗時の処理
};
fileListener.onSecurityError = function(file:FileReference, error:String):Void {
// セキュリティエラーでアップロード失敗時の処理
};
fileRef.addListener(fileListener);
var fileTypeList:Array = new Array();
fileTypeList.push({description: "画像ファイル", extension: "*.jpg;*.png"});
fileBtn.onRelease = function():Void {
var dialog:Boolean = fileRef.browse(fileTypeList);
if (!dialog) {
// ダイアログボックス表示失敗時の処理
}
};
uploadBtn.onRelease = function():Void {
var uploaderPath:String = "uploader.php";
var uploaded:Boolean = fileRef.upload(uploaderPath);
if (!uploaded) {
// アップロード失敗時の処理
}
};
と記述。
uploader.php (ヘルプ「アプリケーションへのファイルアップロード機能の追加」参照)
<?php
$MAXIMUM_FILESIZE = 200 * 1024;
$MAXIMUM_FILE_COUNT = 5;
echo exif_imagetype($_FILES['Filedata']);
if ($_FILES['Filedata']['size'] <= $MAXIMUM_FILESIZE) {
move_uploaded_file($_FILES['Filedata']['tmp_name'], "./temp/".$_FILES['Filedata']['name']);
$type = exif_imagetype("./temp/".$_FILES['Filedata']['name']);
if ($type == 2 || $type == 3) {
rename("./temp/".$_FILES['Filedata']['name'], "./upfiles/".$_FILES['Filedata']['name']);
} else {
unlink("./temp/".$_FILES['Filedata']['name']);
}
}
$directory = opendir('./upfiles/');
$files = array();
while ($file = readdir($directory)) {
array_push($files, array('./upfiles/'.$file, filectime('./upfiles/'.$file)));
}
usort($files, sorter);
if (count($files) > $MAXIMUM_FILE_COUNT) {
//$files_to_delete = array_splice($files, 0, count($files) - $MAXIMUM_FILE_COUNT);
$files_to_delete = array_splice($files, 0, count($files) - $MAXIMUM_FILE_COUNT - 1);
for ($i = 0; $i < count($files_to_delete); $i++) {
unlink($files_to_delete[$i][0]);
}
}
print_r($files);
closedir($directory);
function sorter($a, $b) {
if ($a[1] == $b[1]) {
return 0;
} else {
return ($a[1] < $b[1]) ? -1 : 1;
}
}
?>
# ただし、上記のように修正しないと、最大ファイル数が4になってしまう。
onProgress (FileReference.onProgress イベントリスナー)
onProgress = function(fileRef:FileReference, bytesLoaded:Number, bytesTotal:Number) {}
ファイルのアップロード処理中またはダウンロード処理中に定期的に呼び出されます。onProgress リスナーは、Flash Player がバイトをサーバーに転送しているときに呼び出され、最終的に転送が成功しなくても、転送の実行中は定期的に呼び出されます。ファイルの転送が成功して完了したかどうか、およびそのタイミングを確認するには、onComplete を使用します。
使用できるバージョン
ActionScript 1.0、Flash Player 8
パラメータ
fileRef:flash.net.FileReference
処理を開始した FileReference オブジェクト。
bytesLoaded:Number
これまで転送されたバイト数。
bytesTotal:Number
転送するファイルの全体サイズ (バイト単位)。サイズが決定できない場合、この値は -1 になります。
場合によっては、onProgress リスナーが呼び出されないこともあります。たとえば、転送対象ファイルが非常に小さい場合や、アップロードやダウンロードが非常に短時間に終わる場合などです。
ファイルのアップロードの進捗状況は、OS X 10.3 より前の Macintosh プラットフォームでは確認できません。onProgress イベントは、アップロード処理中に呼び出されますが、bytesLoaded パラメータの値は、進捗状況を確認できないことを示す -1 です。
ファイルサイズが小さいと、onProgress で nTotalBytes が取れない?

うーん。
[修正] (07/04/08 Sun 06:53)ファイルサイズが小さい場合に対して、onOpen で file.size を取得するようにした。
関連記事:
FileReferenceを使ってみる (1)関連記事:
FileReferenceを使ってみる (2)関連記事:
FileReferenceを使ってみる (3)関連記事:
FileReferenceを使ってみる (4)