まず、ファイルのアップロード
ファイルアップロードプロジェクトの開発は、最も一般的な機能の一つである、springMVCは良いサポートファイルのアップロードすることができますが、SpringMVCのデフォルトのコンテキストはMultipartResolverを装備していない、したがって、デフォルトでは、ファイルのアップロード作業を処理することはできません
あなたは春のファイルアップロード機能を使用する場合は、コンテキスト内でMultipartResolverを設定する必要があります
1、設定ファイルとガイドパケット
springmvc-servlet.xmlプロファイリングのために
1 <! -ファイルアップロードの設定- > 2 <豆ID = "MultipartResolver" 。3 クラス = "org.springframework.web.multipart.commons.CommonsMultipartResolver"> 。4 。<プロパティ名= "defaultEncoding"値=」UTF-8 "/> 5 <! -アップロードファイルサイズ制限をバイト単位で(= 10485760 10Mの) - > 6 <プロパティ名=" maxUploadSize "値=" 1048576 "/> 7 <プロパティ名=" maxInMemorySize「値= "40960" /> 8 </豆>
図2に示すように、フロントエンドはUpload.jsp
ファイルをアップロードするために、フォームメソッドをPOSTに設定する必要があり、そしてENCTYPEは、multipart / form-dataに、この場合にのみ、ブラウザは、バイナリデータを送信するためにファイルサーバにユーザによって選択されるであろう
1 <%@ページのcontentType = "text / htmlの;のcharset = UTF-8"言語= "Javaの" %> 2 <HTML> 3 <BODY> 4 5 <フォームアクション= "$ {pageContext.request.contextPath} / upload1 " 6 ENCTYPE ="マルチパート/フォームデータ」METHOD = "POST"> 7 <P>上传文件:<INPUT TYPE = "FILE" NAME = "ファイル" /> </ P> 8 <P>の<input type =値を"送信" = "上传"> </ P> 9 </フォーム> 10 11 </ BODY> 12 </ HTML>
(1)アップロードされたファイルの方法の流れによって、
@RequestParam(「ファイル」)パッケージ名=ファイルがCommonsMultipartFileオブジェクトに生成されたファイルを制御し、アレイは、バルクアップロードCommonsMultipartFileと比較することができます
CommonsMultipartFile一般的な方法:
- 文字列getOriginalFilenameは():以前のファイルをアップロードするとして知られて取得します
- InputStreamのgetInputStreamは():ファイルストリームを取得します。
- transferTo(ファイルDEST)を無効:ファイルディレクトリをアップロードするファイルを保存します
コード
1 @Controller 2 パブリック クラスControllerUpload { 3 。4 @RequestMapping( "/ upload1" ) 。5 パブリック文字列ファイルアップロード(@RequestParam( "ファイル" )CommonsMultipartFileファイル、 図6 のHttpServletRequest要求)スローにIOException { 。7 。8 // 1ファイルの名前取得 9 uploadName =文字列file.getOriginalFilename(); 10 // 2.ファイル名がnullの場合は帰国している 11。 IF( "" .equals(uploadName)){ 12が 復帰 "リダイレクト:/index.jsp"、 13である } 14 のSystem.out.println( "ファイル名をアップロード:" + uploadName); 15 16 // 設定を保存する3.アップロードパス 17 Request.getServletContext文字列のパス=()getRealPath(「/ WEB-INF / upload1。 " ); 18 // 4パスが存在しない場合に作成される 19。 ファイルのrealpath = 新しい新しいファイル(パス); 20は IF!(realPath.exists()){ 21は realPath.mkdir(); 22である } 23である のSystem.out。 println( "パス名を保存:" + 実パス); 24 25 // 5.ファイル入力ストリーム 26 =でのInputStream file.getInputStream()。 27 // 6.文件输入流 28 のFileOutputStreamアウト= 新しいのFileOutputStream(新しいファイル(実パス、uploadName)); 29 30 // 7读取 31 のint LEN = 0 。 32 バイト []バイト= 新しい バイト [1024 ]; 33 ながら(!(LEN = in.read(バイト))= -1 ){ 34 out.write(バイト0 、LEN)。 35 out.flush()。 36 } 37 out.close()。 38 in.close()。 39 40 リターン "リダイレクト:/success.jspを" ; 41 } 42 }
テストを実行
保存した場所
(2)file.Transtoの使用は、アップロードします
コード
1 @Controller 2 パブリック クラスControllerUpload { 3 4 @RequestMapping( "/ upload2" ) 5 パブリック文字列fileUpload2(@RequestParam( "ファイル" )CommonsMultipartFileファイル、 6 HttpServletRequestのリクエスト)がスローにIOException { 7 8 // 上传路径保存设置 9 ストリングパス= request.getServletContext()getRealPath( "/ WEB-INF / upload2"。 )。 10 ファイルのrealpath = 新しいファイル(パス)。 11 もし(!realPath.exists()){ 12は 、realPath.mkdir() 13がある } 14 15 // アドレスアップロードファイル 16 のSystem.out.println(「アップロードアドレス保存ファイル:」+ 実パス); 17 18がある // CommonsMultipartFileの方法で直接ファイルを書き込む(この時に注意してください) 19 file.transferTo(新しい新規ファイル(のrealpath + "/" + file.getOriginalFilename())); 20は、 21である リターン "リダイレクト:/success.jsp" ; 22である } 23れます }
【注意点は:ここでは、成功したアップロードインターフェースを表示するための2つの方法があり、最初のものは、私のように成功し、新たな成功が.jspです。
そして、成功したアップロードが成功したインターフェイスにリダイレクトする後。あなたが戻るとアップロードが成功した後に直接表示されるように、第2は、コントローラにJSON、プラス@ResponseBodyを実行し、文を返すことです]
第二に、ファイルのダウンロード
図1に示すように、フロントdownload.jsp
1 <%@ページのcontentType = "text / htmlの;のcharset = UTF-8"言語= "Javaの" %> 2 <HTML> 3 <BODY> 4 5 <HREF = "$ {pageContext.request.contextPath} /ダウンロード「>下载图片</a>の 6 7 </ BODY> 8 </ HTML>
図2に示すように、制御コード
- 最初のセットに対する応答
- ファイルを読む - InputStreamを
- ファイルを書く - のOutputStream
- 操作を実行します
- 閉じるストリーム(第一スイッチ)
1 @Controller 2 パブリック クラスControllerDownload { 3 。4 @RequestMapping( "/ダウンロード" ) 。5つの パブリック文字列ダウンロード(HttpServletResponseの応答)スロー例外{ 。6 。7 // 画像をダウンロードする1アドレス 8 文字列のパス=「F:\\画像" ; 9 文字列filename =" 9.jpg " ; 10 11 // 2セット応答レスポンスヘッダ 12である (response.reset); //は、ページがキャッシュされていない設定し、空のバッファ 13は、 response.setCharacterEncoding(" UTF-8「); // 文字エンコーディング 14 response.setContentType( "マルチパート/フォームデータ"); // バイナリ送信データ 15 // 3.応答ヘッダ 16 response.setHeader( "コンテンツの廃棄" 、 17。 "添付; fileNameに=" + URLEncoder.encode(ファイル名"UTF-8" )); 18である 。19 ファイルファイル= 新しい新しいファイル(パス、ファイル名); 20 // 4は、ファイルを読む-入力ストリーム 21は、 入力ストリーム入力= 新しい新しいFileInputStreamを(ファイル); 22である // 5。ファイルを書き込む-出力ストリーム 23である のOutputStream OUT = response.getOutputStream(); 24 25 バイト[]バフ= 新しい バイト [1024 ]; 26 int型のインデックス= 0 。 27 // 6.执行写出操作 28 ながら((インデックス= input.read(バフ))= -1!){ 29 out.write(バフ、0 、インデックス)。 30 out.flush()。 31 } 32 out.close()。 33 input.close()。 34 リターン ヌル。 35 } 36 }
テストを実行