転載します。https://blog.kuangstudy.com/index.php/archives/486/
.SpringMVCファイルのアップロードとダウンロード
1.準備
ファイルアップロードプロジェクトの開発は、最も一般的な機能の一つである、それはデフォルトではファイルのアップロード作業を扱うことができないので、springMVCは、良いサポートファイルのアップロードすることができますが、SpringMVCのデフォルトのコンテキストはMultipartResolverを装備されていません。あなたは春のファイルアップロード機能を使用する場合は、コンテキスト内でMultipartResolverを設定する必要があります。
ファイルをアップロードするためには、フォームは、POSTメソッドに設定する必要があり、およびマルチパート/フォームデータへのenctype:遠位フォームが必要です。この場合にのみ、ブラウザはバイナリデータとしてサーバーにファイルを選択するようにユーザーに送信されます。
詳細説明するフォームのenctype属性:
-
アプリケーション/ X-WWW = form-urlencodedで:デフォルト、唯一のフォームフィールドの値の属性値を処理し、フォームフィールドの値をURLにエンコードするこのエンコーディングプロセスで形成することになります。
-
マルチパート/フォームデータ:この方法をコードするバイナリデータストリームを形成する処理され、このフィールドの内容は、ファイルをコードファイルは、リクエストパラメータはなく、文字エンコーディングにパッケージされる指定。
-
テキスト/平野:「+」記号にスペースを変換することに加えて、他の文字は、符号化処理を行っていない、このメソッドは、フォームから直接メールを送信するために適用されます。
<フォームアクション= ""にenctype = "multipart / form-データ"方式= "ポスト"> の<input type = "ファイル"名= "ファイル" /> の<input type = "提出"> </フォーム>
ENCTYPEマルチパート/フォームデータに設定すると、即ち、ブラウザは、バイナリストリーム処理フォームデータを採用すると、アップロードされたファイルを処理するため、元のサーバ側へのHTTPレスポンスを解析することを含みます。2003年には、Apache Software Foundationのは、すぐにファイルをアップロードするための最良の選択サーブレット/ JSPのプログラマになったオープンソース・コモンズのFileUploadコンポーネントを、リリースしました。
-
Servlet3.0仕様では、すでにファイルのアップロードを処理するための方法を提供しますが、このニーズは、サーブレットのアップロードに行われます。
-
Spring MVCのは、シンプルなパッケージを提供します。
-
Spring MVCのファイルのアップロードこのサポートを直接サポートしていMultipartResolverプラグアンドプレイの実装です。
-
CommonsMultipartResolver:Spring MVCのはMultipartResolver実装クラスを達成するためにはApache CommonsのするFileUpload技術を使用して。そのため、== SpringMVCファイルのアップロードも==はApache CommonsのするFileUploadコンポーネントに依存する必要があります。
2.ファイルには、2つのコードをアップロード
ステップ:
-
pom.xmlにjarファイルのパッケージを追加します。
-
配置springmvc-servlet.xml
-
フロントページを書きます
-
ライトバックエンド
-
テスト
(1)コード:
pom.xmlにjarファイルのパッケージを追加します。
<! -文件上传- > <依存> <groupIdを>コモンズ-ファイルアップロード</ groupIdを> <たartifactId>コモンズ-ファイルアップロード</たartifactId> <バージョン> 1.3.3 </バージョン> </依存関係> <! -サーブレットAPI导入高版本的- > <依存性> <groupIdを>のjavax.servlet </のgroupId> <たartifactId>のjavax.servlet-API </たartifactId> <バージョン> 4.0.1 </バージョン> </依存>
配置springmvc-servlet.xml
<! -ファイルアップロードの設定- >
<豆ID = "MultipartResolver" クラス = "org.springframework.web.multipart.commons.CommonsMultipartResolver">
<! -要求された符号化フォーマット、JSP pageEncodingはプロパティを一致しなければなりません、 > - ISOとフォームの内容、デフォルト-8859-1を読み取る権限
値=「UTF-8」/>「defaultEncoding」<プロパティ名=
!< -バイト単位で、アップロード制限サイズを(= 10485760 、10M) - >
<プロパティ名= "maxUploadSize"値= "10485760" />
<プロパティ名= "maxInMemorySize"値= "40960" />
</豆>
フロントページを書きます
<%@ページのcontentType = "text / htmlの;のcharset = UTF-8"言語= "javaの" %> <HTML> <HEAD> <TITLE>アップロード</ TITLE> </ HEAD> <BODY> <H1>方式1 </ H1> <FORM ACTION = "$ {pageContext.request.contextPath} /アップロード"のenctype = "マルチパート/フォームデータ" METHOD = "POST"> の<input type = "ファイル" NAME = "ファイル" /> <入力タイプ= "提出"値= "アップロード"> </ FORM> </ BODY> </ HTML>
ライトバックエンド
インポートorg.springframework.web.bind.annotation.RequestMapping; インポートorg.springframework.web.bind.annotation.RequestParam; インポートorg.springframework.web.bind.annotation.RestController; インポートorg.springframework.web.multipart.commons。 CommonsMultipartFile; インポートするjavax.servlet.http.HttpServletRequest; インポート java.io. * ; @RestController パブリック クラスFileController { // @RequestParam(「ファイル」)CommonsMultipartFileにパッケージ名=ファイル取得したターゲットファイルを制御するために、 @ 一括アップロードCommonsMultipartFile配列に比べ RequestMapping(「/アップロード」@ ) 公衆FileUploadのString(@RequestParam( "ファイル")CommonsMultipartFileファイル、HttpServletRequestのリクエスト)がスローIOExceptionが{ // ファイル名を取得:file.getOriginalFilename(); 文字列uploadFileName = file.getOriginalFilenameを(); // ファイル名が直接戻って、nullの場合ホームへ! IF( "" .equals(uploadFileName)){ リターン "filenameがNULLである!!" ; } のSystem.out.println( "アップロードファイル名:" + uploadFileName); // アップロード設定保存パス 文字列のパス= request.getServletContext ().getRealPath(「/アップロード」); // パスが存在しない場合、作成する ファイルのrealpathを= 新新ファイル(パス); IF(!{RealPath.exists()) realPath.mkdir(); } System.out.printlnは( "アドレスを保存するには、アップロードファイル:" + 実パス); のInputStream IS = file.getInputStream(); // ファイル入力ストリーム のOutputStream OS = 新しい新たFileOutputStream(新しい新規ファイル(のrealpath、uploadFileNameを)); // ファイル出力ストリーム // リードライト INT LEN = 0 ; バイト []バッファ= 新しい新しい バイト [1024 ]; 一方、((LEN = is.read(緩衝液))= - !1){ os.write(バッファ、0 、)でlen; os.flush(); } にos.close()を; is.close(); 戻り値は、 "正常にアップロード!" ; } }
テストは成功です!
(1)コードII:
file.Transtoを使用すると、アップロードしたファイルを保存します
フロントページを書きます
<H1>采用file.Transto来保存上传的文件</ H1> <FORM ACTION = "$ {pageContext.request.contextPath} / upload2"のenctype = "マルチパート/フォームデータ" METHOD = "POST"> の<input type = "ファイル"名= "ファイル" /> <入力タイプ= "提出"値= "アップロード"> </フォーム>
ライトバックエンド
/ * *使用file.Transtoアップロードされたファイルを保存します * / @ RequestMapping( "/ upload2を" ) 公共文字列fileUpload2(@RequestParam( "ファイル")CommonsMultipartFileファイル、HttpServletRequestのリクエスト)スローにIOException { // 設定保存するためにアップロードパスを 文字列のパスをrequest.getServletContext =()getRealPath( "/アップロード。" ); ファイルのrealpath = 新しい新しいファイル(パス); IF(!{realPath.exists()) realPath.mkdir(); } // アップロードアドレス のSystem.out。 println(「アドレスを保存するには、アップロードファイル:」+ 実パス); // 書き込みファイルを直接CommonsMultipartFile(この時に注意してください)によって、 file.transferTo(新しいファイル(実パス+ "/" + file.getOriginalFilename())); リターン "上传成功!!" 。 }
テストは成功です!
3.ダウンロード
ダウンロード手順:
-
最初のセットに対する応答
-
ファイルを読む - InputStreamを
-
書き込みファイル - のOutputStream
-
操作を実行します
-
閉じるストリーム(第一スイッチ)
フロントページを書きます
<a href="${pageContext.request.contextPath}/download">点击下载する</a>
ライトバックエンド
プロジェクトディレクトリのフォルダにアップロードファイルは、画像の.png画像を取得するためのコードをパックダウンロード
@ RequestMapping(値= "/ダウンロード" ) 公共の文字列ダウンロード(HttpServletResponseの応答、HttpServletRequestのリクエスト)がスロー例外{ //を絵アドレスダウンロードするには 文字列のパス= request.getServletContext()getRealPath( "/アップロード" ;) 文字列fileNameに =を「コード画像の.png」; // 1、最初の応答に応答が提供さ response.resetを(); // ページがキャッシュされていない設定し、空きバッファ response.setCharacterEncoding(「UTF-8」); // 文字コード response.setContentTypeを( "マルチパート/フォームデータ「); // バイナリ送信データ // 設定応答ヘッダ response.setHeader(」コンテンツの廃棄」、 "添付; fileNameに=" + URLEncoder.encode(ファイル名、 "UTF-8" )); ファイルファイル = 新しい新しいファイル(パス、ファイル名); // 2、ファイル読み取り-入力ストリーム 入力ストリームのINPUT = 新しい新しい(のFileInputStreamをファイル); // 3は、ファイル書き込み-出力ストリーム のOutputStream OUT = response.getOutputStream(); バイト [] = BUFF 新しい新しい バイト [1024 ]; int型のインデックス= 0 ; // 4、行う書き込み動作を。 しばらく(( !input.read指数=(BUFF))= -1 ){ out.write(BUFF、 0 、インデックス); out.flush()。 } out.close()。 )(input.close。 リターン ヌル。 }
テストは成功です!