JavaのWebアプリケーション開発フレームワークによる、Webサイト開発の顛末記です。

EclipseのMavenを使った、Spring-MVC、Thymeleaf、MyBatis 等のプログラミングテクニックを、
備忘録的に記録しています。実際に動くソースコードを多用して説明していますので、
これからEclipseや、Spring-MVCを始めたいと思っている人にとって、少しでも参考になれば幸いです。
Spring-MVCの散歩道 > 応用の森(jQuery/JavaScript 編) > dropzone.jsを使用した、Ajaxでのファイルアップロードサンプル

package jp.dip.arimodoki.cntl;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;

import org.apache.commons.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import jp.dip.arimodoki.common.CConst;
import jp.dip.arimodoki.model.FormFileIf;

@Controller
public class Dropzone implements CConst {

    @Autowired      //リクエストパラメータFormBeanをDIする
    private FormFileIf frmupload;


    /**
     * FormFileクラスのデータモデルバインド処理
     */
    @ModelAttribute("FormUpload")
    public FormFileIf setupBind() {
        logger.log_info(this,"setupBind");
        return this.frmupload;
    }

    /**
     * ファイルアップロード画面描画
     */
    @RequestMapping(value = "/dzfileuploadview")
     public String dzfileuploadview() {
        return "mydropzone";
    }

    /**
     * ファイルアップロード実施
     */
    @RequestMapping(value = "/dzupload")
     public String dzupload(
             //送信されたFormData情報を受け取ります
             @ModelAttribute("FormUpload") FormFileIf uploadfile
         ) throws Exception {

        //ファイル情報を取得
        MultipartFile[] files = uploadfile.getUploadfile();
        //ファイルタイプ(MIME)情報を取得
        String[] imgtype = uploadfile.getImgtype();
        //返却情報を生成
        String[] respData = new String[files.length];
        for(int i = 0 ; i < files.length ; i++) {
            //submitされた画像データストリームを取得する
            InputStream is = files[i].getInputStream();

            ByteArrayOutputStream os = new ByteArrayOutputStream();
            byte[] indata = new byte[10240*16];
            int siz;
           //バイト配列に変換
           while( ( siz = is.read(indata, 0, indata.length) ) > 0 ) {
               os.write( indata, 0, siz );
            }
            is.close();

            //画像データをbase64エンコードする
            String base64 = new String(Base64.encodeBase64(os.toByteArray()), "ASCII");

            StringBuffer data = new StringBuffer();
            //画像タイプHeader付加
            data.append("data:");
            data.append(imgtype[i]);
            data.append(";base64,");
            data.append(base64);
            respData[i] = new String(data.toString());
        }
        //フォームBeanに返却画像情報をセットする
        this.frmupload.setRespImage(respData);
        //返却結果Viewを表示します。
        return "mydropresult";
    }

}