SpringMVCファイルアップロードと複数ファイルアップロードの例


一、簡単に述べる
Java Webプロジェクトの中で、ファイルアップロード機能はほとんど必要です。プロジェクト開発中にもよく出会っています。以前はあまり手入れしていませんでした。今日は暇があれば、この方面の知識を勉強しました。そこで、私が習ったSpringMVCの中で単一ファイルと複数ファイルをアップロードするという部分の知識をメモしました。
二、ファイルアップロード
1、ページ
ここでは簡単なフォームの提出例として、フォームの提出方法をpostに設定し、enctypeの値を「multiipad/form-data」に設定します。

<form action="${pageContext.request.contextPath}/test/upload.do" method="post" enctype="multipart/form-data">
  <input type="file" name="img"><br /> 
  <input type="submit" name="  ">
</form>
2、コントローラ
Controllerの処理方法では、MultiiprtFileオブジェクトをパラメータとして使用して、フロントエンドからアップロードされたファイルを受信します。具体的にはコードコメントを見てください。

@Controller
@RequestMapping("/test")
public class MyController {

  @RequestMapping(value = "/upload.do", method = RequestMethod.POST)
  //    MultipartFile          file   input   name  ,        MultipartFile            ,       @RequestParam("img")          
  public String upload(MultipartFile img, HttpSession session)
      throws Exception {
    //         ,MultipartFile    null,      getSize()                   
    if (img.getSize() > 0) {
      //               , :/home/tomcat/webapp/   /images
      String path = session.getServletContext().getRealPath("images");
      //          , :  .png
      String fileName = img.getOriginalFilename();
      //          ,            , :    jpg png     
      if (fileName.endsWith("jpg") || fileName.endsWith("png")) {
        File file = new File(path, fileName);
        img.transferTo(file);
        return "/success.jsp";
      }
    }
    return "/error.jsp";
  }
}

3、スプリングmvc.xml配置
MultiiprtFileオブジェクトを使用して、フロントエンドからアップロードされたファイルを受信するには、springmvcの設定ファイルで以下のように構成する必要があります。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
  xmlns:context="http://www.springframework.org/schema/context"
  xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">

  ...

  <!--   :CommonsMultipartResolver id      ,   multipartResolver,     -->
  <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!--                         -->
    <property name="defaultEncoding" value="utf-8"/>
    <!--      ,                ,               1M(1*1024*1024) -->
    <property name="maxUploadSize" value="1048576"/>
    <!--  maxUploadSize   ,  maxUploadSizePerFile            , maxUploadSize            -->
    <property name="maxUploadSizePerFile" value="1048576"/>
  </bean>

  <!--             ,               -->
  <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="defaultErrorView" value="/error.jsp"/>
  </bean>
</beans>

上に配置されたファイルのCommons MultiiprtResolaverのプロパティ値の設定は必須ではなく、すべて書かなくてもいいです。ここに行けば、単一のファイルをアップロードできます。
三、マルチファイルアップロード
多ファイルアップロードも簡単です。単ファイルアップロードはControllerの処理方法でMultiiprtFileオブジェクトをパラメータ受信の前にアップロードされたファイルとして使用します。多ファイルアップロードはMultiiprtFileオブジェクト配列を使って受信します。
1、ページ
このページにはいくつかのname値のようなfileタイプのinputタグがありますが、他の添付ファイルのアップロードページは悪くありません。

<form action="${pageContext.request.contextPath}/test/upload.do" method="post" enctype="multipart/form-data">
  file 1 : <input type="file" name="imgs"><br /> 
  file 2 : <input type="file" name="imgs"><br /> 
  file 3 : <input type="file" name="imgs"><br /> 
  <input type="submit" name="  ">
</form>
2、コントローラ
コントローラでの処理方法はMultiiprtFile[]配列を受信パラメータとして使用していますが、直接使用することはできません。校正パラメータが必要です。具体的にはコードコメントを見てください。

@Controller
@RequestMapping("/test")
public class MyController {

  @RequestMapping(value = "/upload.do", method = RequestMethod.POST)
  //    MultipartFile[] imgs               ,imgs       file   input   name,               MultipartFile  ,
  //              MultipartFile[]  ,      [Lorg.springframework.web.multipart.MultipartFile;.<init>()  ,
  //      @RequestParam    (    MultipartFile     ),        :@RequestParam("imgs") MultipartFile[] files。
  public String upload(@RequestParam MultipartFile[] imgs, HttpSession session)
      throws Exception {
    for (MultipartFile img : imgs) {
      if (img.getSize() > 0) {
        String path = session.getServletContext().getRealPath("images");
        String fileName = img.getOriginalFilename();
        if (fileName.endsWith("jpg") || fileName.endsWith("png")) {
          File file = new File(path, fileName);
          img.transferTo(file);
        }
      }
    }
    return "/success.jsp";
  }
}
同様に、MultiiprtFileアレイを使用して、フロントエンドからアップロードされた複数のファイルを受信しても、springmvcのプロファイルを配置する必要があります。具体的な構成は上記のファイルにアップロードされたspringmvc.xmlの構成と同じです。直接コピーすればいいです。これで、複数のファイルをアップロードすることができます。
四、複数のファイルのアップロード状況は総合的である。
もちろん、プロジェクト开発中、シーンはそんなに简単ではないかもしれません。上记の多ファイルアップロードはすべてファイルを选んでから一绪にアップロードします。またまたは1つのページの中で、1つずつ選択した複数のファイルをアップロードしたり、1回で選択した複数のファイルをアップロードしたりする必要があります。大丈夫です。MultiiprtFile[]を食べて、コードもeasuryです。下から直接コードをつけます。
1、ページ
ここの「一度に複数のファイルを選択したマルチファイルアップロード」は、inputタグにmultiple属性を加えたものです。

<form action="${pageContext.request.contextPath}/test/upload.do" method="post" enctype="multipart/form-data">

                 : <br /> 
  <input type="file" name="imgs1" multiple><br /> <br /> 

                 : <br /> 
  <input type="file" name="imgs2"><br /> 
  <input type="file" name="imgs2"><br /><br /> 

        : <br /> 
  <input type="file" name="imgs3"><br /><br /> 
  <input type="submit" name="  ">
</form>

2、コントローラ

@Controller
@RequestMapping("/test")
public class MyController {

  @RequestMapping(value = "/upload.do", method = RequestMethod.POST)
  public String upload(@RequestParam MultipartFile[] imgs1,@RequestParam MultipartFile[] imgs2,@RequestParam MultipartFile[] imgs3, HttpSession session)
      throws Exception {
    String path = session.getServletContext().getRealPath("images");
    for (MultipartFile img : imgs1) {
      uploadFile(path, img);
    }
    for (MultipartFile img : imgs2) {
      uploadFile(path, img);
    }
    for (MultipartFile img : imgs3) {
      uploadFile(path, img);
    }
    return "/success.jsp";
  }

  private void uploadFile(String path, MultipartFile img) throws IOException {
    if (img.getSize() > 0) {
      String fileName = img.getOriginalFilename();
      if (fileName.endsWith("jpg") || fileName.endsWith("png")) {
        File file = new File(path, fileName);
        img.transferTo(file);
      }
    }
  }
}

MultiiprtFile[]はこのように強力で、単一でも論理的に処理されるので、プロジェクト開発においてMultiiprtFile[]をファイルの受信パラメータとして使用することを推奨します。
五、開拓
1、MultiiprtFile類でよく使われるいくつかの方法:

String getContentType()//    MIME  
InputStream getInputStream()//     
String getName() //            
String getOriginalFilename() //         
long getSize() //         ,  byte
boolean isEmpty() //    
void transferTo(File dest)
2、Commons MultiiPad Resolaverの属性解析
  • default Engcoding:request要求を解析するためのデフォルトの符号化フォーマットを示し、指定がない場合はServlet仕様に従ってデフォルト値ISO-859-1を使用します。requestが自分でそのコードフォーマットを指定した時、ここで指定したdefault Engcodingを無視します。
  • uplloadTempDir:ファイルアップロード時の一時ディレクトリを設定し、デフォルトはServlet容器の一時ディレクトリです。
  • maxUploadSize:アップロードを許可する最大ファイルサイズを設定し、バイト単位で計算します。-1に設定すると無制限となり、デフォルトは-1です。
  • maxUploadSize PerFile:maxUploadSizeと同じですが、maxUploadSize PerFileはアップロードファイルのサイズを制限します。maxUploadSizeはアップロードファイルのサイズを制限します。
  • maxInMemorySize:ファイルアップロード時にメモリに書き込まれる最大値を設定し、バイト単位で計算します。デフォルトは10240です。
  • reolveLazinly:trueの場合、UploadActionでファイルサイズ異常をキャプチャするために、遅延ファイル解析を有効にします。
  • 六、注意
  • 開発の過程で、プロファイル中の異常解像器を先に注釈してください。エラーを確認しやすいです。
  • 時にアップロードエラーが発生したのは、私たちが設定ファイルにアップロードファイルのサイズを制限したからです。この制限を加えなくてもいいです。しかし、個人的にはこの制限が一番いいです。
  • SpringMVCでMultiiprtFileを使用してアップロードファイルを受信するには2つのjarパッケージに依存する必要があります。
  • 以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。