▼ActionScript 3.0メモ▼
ファイルのアップロード


ファイルのアップロードを行うFlashを作成する。



ソースコード - 1ファイル版
FileReferenceEx.as
package {
    import flash.display.*;
    import flash.events.*;
    import flash.net.*;
    import flash.text.*;
 
    //ファイルのアップロード
    [SWF(width=240, height=240, backgroundColor=0xFFFFFF)]
    public class FileReferenceEx extends Sprite {
        private var label:TextField;
        private var fileRef:FileReference;
        
        //コンストラクタ
        public function FileReferenceEx() {
            //ラベルの生成
            label=makeLabel("FileReferenceEx\n\n");
            addChild(label);

            //ファイルリファレンスの生成
            fileRef=new FileReference();
            fileRef.addEventListener(Event.SELECT,
                function(e:Event):void{
                    var request:URLRequest=new URLRequest(
                        "http://localhost/sample/upload.php");
                    request.method=URLRequestMethod.POST;
                    fileRef.upload(request,"Filedata");
                });
            fileRef.addEventListener(Event.COMPLETE, 
                function(e:Event):void{
                    label.appendText("Complete\n");
                });
            fileRef.addEventListener(IOErrorEvent.IO_ERROR,
                function(e:Event):void{
                    label.appendText("IOError\n");
                });
            fileRef.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
                function(e:SecurityErrorEvent):void{
                    label.appendText("SecurityError\n");
                });
            fileRef.browse();           
        }

        //ラベルの生成
        private function makeLabel(text:String):TextField {
            var label:TextField=new TextField();
            label.text      =text;
            label.autoSize  =TextFieldAutoSize.LEFT;
            label.selectable=false;
            return label;
        }
    }
}


ソースコード - 複数ファイル版
FileReferenceListEx.as
package {
    import flash.display.*;
    import flash.events.*;
    import flash.net.*;
    import flash.text.*;
 
    //複数ファイルのアップロード
    [SWF(width=240, height=240, backgroundColor=0xFFFFFF)]
    public class FileReferenceListEx extends Sprite {
        private var label:TextField;
        private var fileRefList:FileReferenceList;
        
        //コンストラクタ
        public function FileReferenceListEx() {
            //ラベルの生成
            label=makeLabel("FileReferenceListEx\n\n");
            addChild(label);

            //ファイルリファレンスの生成
            fileRefList=new FileReferenceList();
            fileRefList.addEventListener(Event.SELECT,onSelect);
            fileRefList.browse();          
        }

        //ラベルの生成
        private function makeLabel(text:String):TextField {
            var label:TextField=new TextField();
            label.text      =text;
            label.autoSize  =TextFieldAutoSize.LEFT;
            label.selectable=false;
            return label;
        }

        //選択イベントの処理
        private function onSelect(evt:Event):void {
            var request:URLRequest=new URLRequest(
                "http://localhost/sample/upload.php");
            request.method=URLRequestMethod.POST;

            var fileRef:FileReference;
            for (var i:int=0;i<fileRefList.fileList.length;i++) {
                fileRef=FileReference(fileRefList.fileList[i]);
                fileRef.addEventListener(Event.COMPLETE, 
                    function(e:Event):void{
                        label.appendText("Complete\n");
                    });
                fileRef.addEventListener(IOErrorEvent.IO_ERROR,
                    function(e:Event):void{
                        label.appendText("IOError\n");
                    });
                fileRef.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
                    function(e:SecurityErrorEvent):void{
                        label.appendText("SecurityError\n");
                    });

                fileRef.upload(request,"Filedata");
            }
        }

    }
}


サーバ
http://local/samples/フォルダに配置し、imagesとtemporaryフォルダを準備。
upload.php
<?php
$MAXIMUM_FILESIZE  =1024*200;//最大ファイルサイズ

//最大ファイルサイズチェック
if ($_FILES['Filedata']['size']<=$MAXIMUM_FILESIZE) {
    //ファイル種別チェック
    move_uploaded_file($_FILES['Filedata']['tmp_name'],
        "./temporary/".$_FILES['Filedata']['name']);
    $type=exif_imagetype("./temporary/".$_FILES['Filedata']['name']);
    
    //ファイル移動
    if ($type == 1 || $type == 2 || $type == 3) {
        rename("./temporary/".$_FILES['Filedata']['name'], 
            "./images/".$_FILES['Filedata']['name']);
    } else {
        unlink("./temporary/".$_FILES['Filedata']['name']);
    }
}



−戻る−