サイト内検索

メインメニュー

ログイン
ユーザID または e-mail:

パスワード:

IDとパスワードを記憶

パスワード紛失

オンライン状況
11 人のユーザが現在オンラインです。 (9 人のユーザが ウェブログ を参照しています。)

 登録ユーザ: 0
 ゲスト: 11

もっと...

ウェブログ カレンダー
« « 2010 9月 » »
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 1 2

最新ブログ記事

最近のコメント

最近のトラックバック

|
ウェブログ - ひろゆきの記事
|
 ひろゆきの記事配信

2007/04/07 Sat
 FileReferenceを使ってみる (2)
カテゴリ: flash : actionscript : 
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)
執筆者: ひろゆき (12:03)
ウェブログ | コメント (0) | トラックバック数 (0) | 閲覧数 (5847)
この記事のトラックバックURL  リンク・引用のないトラックバックは削除することがあります。
http://www.project-nya.jp/modules/weblog/weblog-tb.php/673
投稿された内容の著作権はコメントの投稿者に帰属します。
投稿者 スレッド