Flexでファイルのアップローダーとダウンローダー

ちょいとFlexでファイルのアップローダーとダウンローダーをやってみました。
Flash10では自分が指定したファイルをFlash上で遊べるようです

今回は通常のFlash9でできるファイルのアップとダウンロードです。
こんな感じ
http://moeten.info/flex/20080518_fileReference/bin-release/main.html
#ファイルのアップロードサイズは1MB以内で

ソースはこちら
PHP

<?php //アップされたファイルを保存する。
$fname = "cache/" . $_FILES['Filedata']['name'];
move_uploaded_file( $_FILES['Filedata']['tmp_name'] ,  $fname );
exit;
?>

Flex

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" viewSourceURL="srcview/index.html" backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#FFFFFF, #FFBCBC]">
<mx:Script>
<![CDATA[
//ファイルアップロード
private var uploadURL:URLRequest;
private var file:FileReference;
private function FileReference_upload():void{
    uploadURL = new URLRequest();
    //ファイルのアップロード先URL
    uploadURL.url = "http://moeten.info/flex/20080518_fileReference/test.php";
    file = new FileReference();
    file.addEventListener(Event.SELECT, selectHandler);
    file.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
    file.addEventListener(ProgressEvent.PROGRESS, progressHandler);
    file.addEventListener(Event.COMPLETE, completeHandler);
    file.browse();
}
//ファイルが選択されたとき
private function selectHandler(event:Event):void {
    var file:FileReference = FileReference(event.target);
    myLog.text += "selectHandler: name=" + file.name + " URL=" + uploadURL.url;
    file.upload(uploadURL);
}
//なんかIOエラーのとき
private function ioErrorHandler(event:IOErrorEvent):void {
    myLog.text += "ioErrorHandler: " + event;
}
//アップロード中のとき
private function progressHandler(event:ProgressEvent):void {
    var file:FileReference = FileReference(event.target);
    myLog.text += "progressHandler: name=" + file.name + " bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal;
}
//アップロード完了したとき
private function completeHandler(event:Event):void {
    myLog.text += "completeHandler: " + event;
}
//ファイルダウンロード
private var downloadURL:URLRequest;
private var fileName:String = "test.jpg";
public function FileReference_download():void{
    downloadURL = new URLRequest();
    //ダウンロードファイル
    downloadURL.url = "http://moeten.info/flex/20080518_fileReference/test.jpg";
    file = new FileReference();
    configureListeners(file);
    //初期ファイル名を指定
    file.download(downloadURL, fileName);
}
private function configureListeners(dispatcher:IEventDispatcher):void {
    dispatcher.addEventListener(Event.CANCEL, cancelHandler);
    dispatcher.addEventListener(Event.COMPLETE, completeHandler);
    dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
    dispatcher.addEventListener(Event.OPEN, openHandler);
    dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
    dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
//    dispatcher.addEventListener(Event.SELECT, selectHandler);
}
//キャンセルしたとき
private function cancelHandler(event:Event):void {
    myLog.text +="cancelHandler: " + event;
}
//よくわからないイベント
private function openHandler(event:Event):void {
    myLog.text += "openHandler: " + event;
}
//なんかセキュリティエラーのとき
private function securityErrorHandler(event:SecurityErrorEvent):void {
    myLog.text +="securityErrorHandler: " + event;
}
]]>
</mx:Script>
<mx:Button x="398" y="36" label="ダウンロード" click="FileReference_download()"/>
<mx:TextArea id="myLog" x="45" y="66" width="438" height="430" alpha="0.54"/>
<mx:Button x="45" y="36" label="アップロード" click="FileReference_upload()"/>
</mx:Application>