Top > SAStrutsあれこれ > Flexでファイルアップロードしましょう


Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
 
 
 
 
 
    <controller
        maxFileSize="1024K"
        bufferSize="1024"
        processorClass="org.seasar.struts.action.S2RequestProcessor"
        multipartClass="org.seasar.struts.upload.S2MultipartRequestHandler"/>

Everything is expanded.Everything is shortened.
  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
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
|
|
|
!
|
|
-
|
|
-
|
|
|
|
|
|
|
-
|
|
-
|
|
!
|
|
!
!
package tutorial.action;
 
import java.io.IOException;
import javax.annotation.Resource;
import javax.servlet.ServletContext;
import javax.xml.bind.JAXBException;
import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
import org.seasar.struts.annotation.ActionForm;
import org.seasar.struts.annotation.Execute;
import org.seasar.struts.upload.S2MultipartRequestHandler;
import org.seasar.struts.util.UploadUtil;
import org.seasar.struts.util.ServletContextUtil;
import org.seasar.struts.util.RequestUtil;
import tutorial.dto.ResponseBase;
import tutorial.form.UploadFileForm;
import tutorial.util.XmlUtil;
 
public class UploadFileAction {
 
    @ActionForm
    @Resource
    protected UploadFileForm uploadFileForm;
    
    /**
     * ファイルサイズが超過(struts-config.xmlのmaxFileSizeを超過)した場合は、
     * uploadメソッドではなく、indexメソッドが呼ばれます。
     * @return
     * @throws JAXBException
     * @throws IOException
     */
    @Execute(validator = false)
    public String index() throws JAXBException, IOException {
        //リクエストから、SAStrutsが格納した例外を取得します。
        SizeLimitExceededException e = (SizeLimitExceededException) RequestUtil.getRequest()
                        .getAttribute(S2MultipartRequestHandler.SIZE_EXCEPTION_KEY);
        
        ResponseBase rb = new ResponseBase();
        rb.result = ResponseBase.FAULT;
        rb.message = e.toString();
        
        XmlUtil.sendXML(ResponseBase.class, rb);
        return null;
    }
    
    @Execute(validator = false)
    public String upload() throws JAXBException, IOException {
 
        ResponseBase rb = new ResponseBase();
        try {
            //ファイルの格納先フォルダの絶対パスを取得
            ServletContext app = ServletContextUtil.getServletContext();
            String path = app.getRealPath("/WEB-INF/images/" + uploadFileForm.formFile.getFileName());
                 
            //ファイル書き込み
            UploadUtil.write(path, uploadFileForm.formFile);
            
        } catch (RuntimeException e) {
            rb.result = ResponseBase.FAULT;
            rb.message = e.toString().substring(0, Math.min(e.toString().length(), 600));
        } finally {
            //一時領域に生成したアップロードファイル情報を削除
            uploadFileForm.formFile.destroy();
        }
        XmlUtil.sendXML(ResponseBase.class, rb);
        return null;
    }
}
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 
 
 
 
 
-
|
|
|
|
|
|
!
package tutorial.form;
 
import org.apache.struts.upload.FormFile;
import org.seasar.struts.annotation.Required;
 
public class UploadFileForm {
 
    @Required
    public String title;
    
    @Required
    public FormFile formFile;
}
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 
 
 
 
 
 
 
 
 
 
 
 
 
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:logic="util.*" layout="absolute">
    
    <!-- 
         ロジッククラスのインスタンス生成
    -->
    <logic:FileUploader id="fileUploader" />
 
    <mx:ApplicationControlBar width="137" top="15" left="15">
        <mx:Button label="ファイルアップロード" click="fileUploader.upload()"/>
    </mx:ApplicationControlBar>
    
</mx:Application>
Everything is expanded.Everything is shortened.
  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
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
-
|
|
|
|
|
|
|
|
-
|
|
|
|
-
!
|
-
|
|
|
|
|
|
|
!
|
|
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
|
-
|
|
!
|
-
|
-
|
-
|
!
!
!
!
package util {
    import flash.events.DataEvent;
    import flash.events.Event;
    import flash.net.FileReference;
    import flash.net.URLRequest;
    import flash.net.URLRequestMethod;
    import flash.net.URLVariables;
    import mx.controls.Alert;
    
    public class FileUploader {
        
        //ファイルをアップロードしたりダウンロードしたりするクラス
        private var _fileRef:FileReference; 
        
        public function FileUploader() {
        }
        
        public function upload():void {
            
            _fileRef = new FileReference();
            _fileRef.addEventListener(Event.SELECT, selectHandler);
            _fileRef.addEventListener(Event.COMPLETE, completeHandler);
            _fileRef.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, uploadDataHandler);
            //ファイル選択ダイアログを起動しましょう。
            _fileRef.browse();
        }
        
        //ファイル選択ダイアログでファイルを選択するとコールされます。
        private function selectHandler(event:Event):void {
            
            //ファイルデータ以外のリクエストパラメーター
            var params:URLVariables = new URLVariables();
            params.title = "なにかのファイルです〜";
            
            //アクションメソッド"upload"を指定、値は適当です。
            params.upload ="action_method";
            
            //リクエストオブジェクトを生成
            var request:URLRequest = new URLRequest("http://localhost:8080/sastruts-flex/uploadFile/");
            request.method = URLRequestMethod.POST;
            request.data = params;
             
            //アップロード
            _fileRef.upload(request, "formFile"); 
        } 
        
        private function completeHandler(e:Event):void {
            //このイベントだとサーバーの処理結果データが受け取れないんですよね〜
            //なので、DataEvent.UPLOAD_COMPLETE_DATAで処理結果判定します。
        }
        
        private function uploadDataHandler(event:DataEvent):void {
            var result:XML = new XML(event.data);
            if( result.result  * "success" ) {
                Alert.show("アップロード成功です");
            } else {
                Alert.show("サーバー処理失敗\n\n理由 : " + result.message);
            }
        }
    }
}

添付ファイル: fileflex_upload_2.jpg 361件 [詳細] fileflex_upload_1.jpg 381件 [詳細]

リロード   新規 編集 凍結解除 差分 添付 複製 名前変更   ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: 2012-08-08 (水) 23:26:01 (2921d)