[Servlet&JSP] Chap 12. ファイルアップロード実装ロジック(MVC 2モード)


準備:cos.jarファイルをWebContent/WEB-INF/libフォルダにコピーする
COSライブラリ:http://www.servlets.com/cos/

デフォルトのファイルアップロードラベル

<form action="" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
</form>
  • ファイルのデータは通常のString形式ではなくバイナリ形式であるため、enctタイプ(符号化タイプ)をmultipart/form-data形式
  • に変換する必要がある.
  • multipart/form-data:
  • ファイルは、ネットワーク上で大容量ファイルを一度に送信できないため、通常配布されます.
  • multipart、ファイル形式でスライス送信を表す
  • MultipartRequestクラス


  • cos.jarライブラリサーブレットによるマルチリクエストクラスの提供

  • 生成者
    MultipartRequest multi = new MultipartRequest(request, saveDirectiory, maxPostSize, encoding, policy);

  • request:multipartRequestに関連付けるrequestオブジェクト

  • saveDirectory:サーバ側に格納されているパス

  • maxPostSize:最大ファイルサイズ

  • エンコーディング:ファイルのエンコーディング方法(ファイル名が韓国語の場合、パラメータ値をutf-8に縮小)

  • policy:ファイル繰返し処理に使用するパラメータ
    policyは、「b.bmp」ファイルがアップロードされ、同じファイルが再アップロードされると「b 1」となる繰り返し処理を提供するパラメータです.bmp"等自動繰返しファイル処理
    パラメータ値は「new DefaultFileRenamePolicy()」を使用します.
  • 役に立つ方法


    getparameterName():フォームに転送されたパラメータの名前をEnumerationタイプに戻します.
    getParameterValue():フォームから受信したパラメータを配列として受信します.
    getParameter():オブジェクト内の対応するパラメータの値を取得します.
    getFileNames():複数のファイルをアップロードするときに、これらの値を「顧客タイプ」に戻します.
    getFilesystemName():実際にサーバにアップロードされたファイルの名前を示します.
    getOriginalFilename():クライアントがアップロードしたファイルのソース名を表します
    getContentType():アップロードファイルを取得するためのコンテンツタイプ
    getFile():サーバにアップロードされたファイルの情報をオブジェクトとして取得します.

    ファイルアップロード実装ロジック


  • index.jsp
  • ファイルアップロードページ->FileUploadPageをクリックします.jsp

  • fileUploadPage.jsp
  • フォームタグ符号化enctype="multipart/form-data"
  • 入力ラベル(type=file,submit)
  • を作成する
  • ファイルのアップロード中にイベントが発生しました(onchange)
  • ファイルサイズ(file.file[0].size)(小数点3桁:file Size.toFixed(3)
  • を生成する.
  • submitクリックイベントが発生しました
  • 寸法検証後true or falseを再試行
  • 正常時:FileUploadServicelet.Java(/file/file Upload.do)
  • を移動
  • 異常:通知を表示し、X
  • を移動する

  • FileUploadServlet.java (/file/fileUpload.do)
  • ファイルアップロードを実現するには、COSライブラリを使用する必要があります.
  • COSライブラリは、複数のリクエストオブジェクトを提供します.

  • MultipartRequestオブジェクトを作成するには、次の5つの値が必要です.
    1)要求オブジェクト(サーブレット提供)
    2)実際にアップロードするパスを設定する(FilePath)
  • バイト
  • ex) request.getServletContext().getRealPath("/upload")
  • 3)最大ファイルサイズ設定値
  • ex) int uploadFileSizeLimit = 1024 1024 1024;
  • 4)ファイル名の符号化処理値
  • ex) String encType="UTF-8";
  • 5)ポリシーに関連するオブジェクト(同名ファイルをアップロードするときにどのように処理されるポリシーに関連するオブジェクト)
  • ex)DefaultFilenRenamePolicyオブジェクトを使用すると、重複ファイル名を持つファイルがアップロードされると、自動的に重複ファイルの後に数字が追加されて処理されます.
  • ex) test.txtをアップロードしてからtextを再入力します.txtという名前のファイルをアップロードすると、2番目にアップロードされたファイルは自動的に1をテストします.txtという名前のポリシー
  • 複数の信頼オブジェクトの作成時に
  • を設定します.

  • 複数部分リクエストオブジェクトの作成
  • ex複数要求複数=新規複数要求(要求、パス、サイズ、符号化、新規DefaultFileRenamePolicy()

  • ファイルサイズの確認
  • ファイルオブジェクト
  • を作成
  • ファイルサイズ(長さ()が50 MBより大きい場合、ファイルオブジェクトを削除し、JSPファイルに移動してアラートを発行し、DoGetメソッド
  • を停止する.

  • データベースにデータを保存する情報の設定
    1)インポート元ファイル名
    String originalFileName= multi.getFilesystemName("file");
    2)ユーザー名のアップロード
    String fileUser= ((Member)request.getSession().getAttribute("member")).getUserId();
    3)アップロード時間(Calendar Class)
    long currentTime =Calendar.getInstance().getTimeInMillis();
    4)アップロード時間(import java.sql.Timestamp;)を実現するフォーマットを指定します.
    SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
    Timestamp uploadTime = Timestamp.valueOf(formatter.format(currentTime));
    5)変更後のファイル名の保存(import java.io.File;)
    File file = new File(uploadFilePath+"\"+originalFileName);
    file.renameTo(new File(uploadFilePath+"\"+fileUser+""+currentTime+"_kh"));
    ファイル名をユーザー名に変更するアップロード時間kh
    String changedFileName= fileUser+""+currentTime+"_kh";
    6)ファイルを保存するパス(変更したファイル名)
    String filePath=uploadFilePath+"\"+changedFileName;
    7)ファイルサイズ(ファイルサイズが大きい場合はlong typeを使用)
    File reFile=new File(filePath);
    long fileSize= reFile.length();
  • データオブジェクトにおけるビジネスロジック処理(<>サービス<>DAO)
  • の戻り値を受け取り、戻り値に基づいて要求値を設定し、FileUpload.jsp
  • に移動
  • fileUpload.jsp
  • の要求値に従って通知を発行し、FileUploadPageを発行します.jsp
  • に移動