servletアップロードファイルのコードの詳細(4)


本論文の例では、servletアップロードファイルの具体的なコードを共有します。
1.servletアップロードファイル
servletアップロードファイルはクライアントのファイルをサーバにアップロードすることです。
サーバにデータを送信する際、クライアントから送信されたhttp要求本文は「multiiprt/form-data」のデータタイプを採用し、複雑な複数のサブ部分の複合フォームを表しています。
「multiipad/form-data」データの処理を簡略化するために。Apache組織が提供する2つのオープンソースパッケージを使ってアップロードが可能です。
fileupladパッケージ(commons-fileuplad-2.1.jar)は、ファイルアップロードのパッケージを担当しています。
ioパッケージ(commons-i-to-1.4.jar)は、入出力のパッケージを担当しています。
2.servletアップロードファイル関連クラス
2.1 fileupladソフトウェアパッケージは、要求本文に含まれる複合フォームの各サブ部分をFileItemオブジェクトとみなす。FileItemオブジェクトは2種類に分けられます。
(1)フォーム内のテキストやボタンなどの一般的なフォームドメインタイプ。
(2)非formFiled:アップロードファイルタイプで、フォームのファイル領域はこのタイプです。
2.2 FileItem FactoryインターフェースとFileItemインターフェース
FileItem FactoryはFileItem対象の工場です。
Disc FileItem FactoryはFileItem Factoryインターフェースを実現し、Disc FileItem FactoryはDisck FileItemオブジェクトを作成するために使用されます。
Disk FileItemオブジェクトは、クライアントからアップロードされたファイルをクライアントに保存するために使用されます。
2.3 Servlet FileUpload類
Servlet FileUploadはファイルアップロードプロセッサです。Disc FileItem Factoryオブジェクトと関連付けられています。
3.ファイルアップロードの実例
ファイルページをアップロードします(uplload)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<form action="upload" enctype="multipart/form-data" method="POST">
  <input name="username" size="30">
  <input type="file" name="file1" size="30">
  <input type="file" name="file2" size="30">
  <input type="submit" name="submit" value="upload">
</form>
</body>
</html>
アップロードファイルのservletクラス

package com.learn;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.poi.common.usermodel.LineStyle;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;


public class ServletUpload extends HttpServlet {

  private String filePath;
  private String tempFilePath;
  @Override
  public void init(ServletConfig config) throws ServletException {
    super.init(config);
    //           
    filePath = config.getInitParameter("filePath");
    tempFilePath = config.getInitParameter("tempFilePath");
    System.out.println("init filepath:"+filePath);
    System.out.println("tempFilePath:"+tempFilePath);

    //         
    filePath = config.getServletContext().getRealPath(filePath);
    tempFilePath = config.getServletContext().getRealPath(tempFilePath);
    System.out.println("realPath:"+filePath);
    System.out.println("tempFilePath"+tempFilePath);


  }


  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    super.doPost(req, resp);
    //            
    resp.setContentType("text/plain");
    resp.setCharacterEncoding("UTF-8");
    //      
    PrintWriter out = resp.getWriter();

    //         FileItem  
    DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
    //              ,   4k
    diskFileItemFactory.setSizeThreshold(4*1024);
    //      
    diskFileItemFactory.setRepository(new File(tempFilePath));

    //           
    ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
    //         
    servletFileUpload.setSizeMax(4*1024*1024);
    //    
    try {
      //      
      List list = servletFileUpload.parseRequest(req);
      //     
      Iterator iterator = list.iterator();
      //    
      while(iterator.hasNext()){

        //      FileItem  
        FileItem fileItem = (FileItem) iterator.next();
        if(fileItem.isFormField()){
          System.out.println("           ");
          processFormFiled(fileItem,out);
        } else {
          System.out.println("           ");
          processUploadFile( fileItem,out);
        }

      }
      System.out.println("     ");
      out.close();

    } catch (FileUploadException e) {
      e.printStackTrace();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  private void processFormFiled(FileItem fileItem,PrintWriter printWriter){
    //        
    String name = fileItem.getName();
    //       
    String value = fileItem.getString();
    printWriter.print("name:"+name+"value:"+value);

  }

  private void processUploadFile(FileItem fileItem,PrintWriter printWriter) throws Exception {

    //      
    String fileName = fileItem.getName();
    int i = fileName.lastIndexOf("\\");
    fileName = fileName.substring(i+1,fileName.length());
    //      
    long fileSize = fileItem.getSize();
    System.out.println("fileName:"+fileName+"| fileSize:"+fileSize);
    if("".equals(fileName) && fileSize == 0)
      return;
    //         
    File upload = new File(filePath+File.separator+fileName);
    fileItem.write(upload);
    //    
    printWriter.print(fileName+"is saved");
    System.out.println("    ");
    printWriter.print("the size of "+fileName+" is "+fileSize);
  }
}

3.web.xml配置

  <servlet>
    <servlet-name>upload</servlet-name>
    <servlet-class>com.learn.ServletUpload</servlet-class>
    <init-param>
      <param-name>filePath</param-name>
      <param-value>file</param-value>
    </init-param>
    <init-param>
      <param-name>tempFilePath</param-name>
      <param-value>temp</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>upload</servlet-name>
    <url-pattern>/upload</url-pattern>
  </servlet-mapping>
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。