JAvaファイルアップロード(単一ファイルとマルチファイル)

8813 ワード

JAvaファイルアップロード(単一ファイルとマルチファイル)
一、簡単に述べる
つのjavaWebプロジェクトの中で、ファイルのアップロードの机能はほとんど不可欠で、私はプロジェクトの开発の中で时々出会うことができて、以前もあまり相手にしていないで、今日暇があってこの方面の知识を学んで、そこで私の学んだSpringMVCの中で単ファイルと多ファイルのアップロードのこの部分の知识をメモします.
二、単一ファイルのアップロード
1、ページ
ここでは簡単なフォームコミットを例に、ファイルアップロードではフォームのコミット方法をpostに設定し、enctypeの値を「multipart/form-data」に設定する必要があります.

2、コントローラ
Controllerの処理方法では、MultipartFileオブジェクトを使用してフロントエンドからアップロードされたファイルをパラメータとして受信します.具体的にはコードコメントを参照してください.

@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、springmvc.xml構成
MultipartFileオブジェクトを使用して、フロントエンドからアップロードされたファイルを受信し、springmvcのプロファイルで次のような構成を行う必要があります.




  ...

  
  
    
    
    
    
    
    
  

  
  
    
  



上のプロファイルのCommonsMultipartResolverのプロパティ値の設定は必須ではありません.すべて書かなくてもいいです.ここでは単一のファイルのアップロードを実現できます.次に、マルチファイルのアップロードを見てみましょう.
三、マルチファイルアップロード
実はマルチファイルアップロードも簡単で、シングルファイルアップロードはControllerの処理方法でMultipartFileオブジェクトをパラメータとしてフロントエンドからアップロードされたファイルを受信し、マルチファイルアップロードはMultipartFileオブジェクト配列で受信します.
1、ページ
このページには、同じfileタイプのinputラベルがいくつかありますが、他のフォローアップファイルにアップロードされたページは悪くありません.

file 1 :
file 2 :
file 3 :
2、コントローラ
コントローラでの処理方法は、受信パラメータとしてMultipartFile[]配列を使用しますが、直接使用することはできません.パラメータを修正する必要があります.具体的な説明はコードコメントを参照してください.

@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;.()  ,
  //      @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";
  }
}


同様に、MultipartFile配列を用いるフロントエンドからアップロードされた複数のファイルを受信してもspringmvcのプロファイルで構成する必要があり、具体的には上記単一ファイルからアップロードされたspringmvcと構成する.xmlの構成は悪くないので、直接コピーすればいいです.これにより、マルチファイルアップロードが可能になります.
四、多種のファイルのアップロード情景の総合
もちろん、プロジェクト開発では、シーンはそんなに簡単ではないかもしれませんが、上記のマルチファイルアップロードは、1つのファイルを選択して一緒にアップロードする(すなわち、複数のnameが同じinputラベル)ものですが、もし私のプロジェクトで1つのinputラベルだけで複数のファイルを一度にアップロードできるとしたら?また、1つのページで1つの選択したマルチファイルアップロードと、1回に選択したマルチファイルアップロードと、単一のファイルアップロードと、どちらが必要ですか?大丈夫、MultipartFile[]通食、コードもeasyで、次は直接コードをつけます.
1、ページ
ここでの「一度に複数のファイルを選択するマルチファイルアップロード」は、inputラベルにmultipleプロパティを付けただけです.

複数のファイルを一度に選択するマルチファイルのアップロード:
一度に1つのファイルを選択したマルチファイルのアップロード:
単一ファイルのアップロード:
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);
      }
    }
  }
}


MultipartFile[]はこのように強力で、単一で複数であっても論理処理は同じであるため、プロジェクト開発においてMultipartFile[]をファイルの受信パラメータとして使用することを推奨する.
五、開拓
1、MultipartFileクラスでよく使われる方法:

String getContentType()//    MIME  
InputStream getInputStream()//     
String getName() //            
String getOriginalFilename() //         
long getSize() //         ,  byte
boolean isEmpty() //    
void transferTo(File dest) 

2、CommonsMultipartResolverの属性解析

defaultEncoding:      request         ,          Servlet        ISO-8859-1。 request                       defaultEncoding。
uploadTempDir:            ,   Servlet       。
maxUploadSize:               ,        。   -1      ,   -1。
maxUploadSizePerFile: maxUploadSize   ,  maxUploadSizePerFile            , maxUploadSize           。
maxInMemorySize:                   ,        ,   10240。
resolveLazily: true ,        ,   UploadAction         。

六、注意
  • 開発の過程で、コンフィギュレーションファイルの中の異常解析器(S i m p l e MappingExceptionResolver)を先に注釈しておくことをお勧めします.エラーを表示するのに便利です.
  • アップロードエラーが発生することがあります.プロファイルでアップロードファイルのサイズを制限しているので、この制限を加えなくてもいいですが、個人的にはこの制限を加えたほうがいいと思います.具体的なファイルのサイズ制限は会社のプロジェクトの状況によって異なります.
  • SpringMVCでMultipartFileを使用してアップロードファイルを受信するには、commons-fileupload-1.3の2つのjarパケットに依存する必要がある.3.jar、commons-io-2.5.jar.

  • もし疑問があれば伝言を残してあるいは当駅のコミュニティに行って討論を交流して、読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!