春ブーツとThymeleafアップロードファイルを使用します
春ブーツMultipartFile使用特性を受信すると、プロセスアップロードされたファイルは、本実施Thymeleafは、フロントページを処理するために使用されます。
クイックスタート:
1、依存関係を追加
<依存性> <のgroupId> org.springframework.boot </のgroupId> <たartifactId>ばねブートスタータウェブ</たartifactId> </依存> <依存性> <のgroupId> org.springframework.boot </のgroupId> <たartifactId >春・ブート・スタータthymeleaf </たartifactId> </依存関係>
2、application.properties構成情報
#サポートされる最大ファイル spring.servlet.multipart.max -fileサイズ= 100MBの #ファイルが上限要求 spring.servlet.multipart.max -requestサイズ= 100メガバイトを
次のように上記構成に加えて#は、あまりにも、一般的な設定情報は次のとおりです。
trueに=をspring.servlet.multipart.enabled、マルチパートアップロードファイルをサポートするかどうかを
spring.servlet.multipart.fileサイズ閾値= 0、ディスクに書き込まれたサポートファイル
spring.servlet。 multipart.location =、ファイルをアップロードするために一時ディレクトリ
spring.servlet.multipart.maxファイルサイズ= 10Mbのを、最大ファイル・サイズをサポート
spring.servlet.multipart.max要求-sizee = 10Mbの、最大のサポート要求サイズ
spring.servletを。 multipart.resolve-レイジー遅延ロードサポートマルチパートアップロードファイルかどうか、偽=
3、クラスを開始
@SpringBootApplication パブリック クラスFileUploadWebApplication { 公共 静的 ボイドメイン(文字列[]引数)は例外{スロー SpringApplication.run(FileUploadWebApplication クラス、引数)を、 } // Tomcatの大きいファイルのアップロード接続がリセット @Bean パブリック(TomcatServletWebServerFactory tomcatEmbedded)を{ TomcatServletWebServerFactoryのTomcat = 新しいTomcatServletWebServerFactory()。 tomcat.addConnectorCustomizers((TomcatConnectorCustomizer)コネクタ - > { もし(<?>(connector.getProtocolHandlerは()のinstanceof AbstractHttp11Protocol )){ // -1は無制限を意味する 。(<?>(AbstractHttp11Protocol)connector.getProtocolHandler())setMaxSwallowSize( - 1 )。 } })。 戻るTomcatを。 } }
TomcatServletWebServerFactory()メソッドは、10Mの接続リセットを超えるファイルをアップロードする問題を解決することです
4、シンプルなフロントページ:
単一ファイルのアップロードページのupload.html:
<!DOCTYPE HTML > < HTML のxmlns:目= "http://www.thymeleaf.org" > < 身体> < H1 >春のブートファイルアップロードの例</ H1 > < フォームのメソッド= "POST" アクション= "/アップロード" のenctype = "マルチパート/フォームデータ" > < 入力タイプ= "ファイル" 名= "ファイル" /> < BR /> < BR /> < 入力タイプ= "送信" フォーム> </ ボディ> </ HTML >
複数のファイルアップロードページuploadMore.html:
<!DOCTYPE HTML > < HTML のxmlns:目= "http://www.thymeleaf.org" > < 身体> < H1 >春のブートファイルはアップロードの例</ H1 > < フォームメソッド= "POST" アクション= "/ uploadMore" のenctype = "マルチパート/フォームデータ" > < 入力タイプ= "ファイル" 名= "ファイル" /> < BR /> < BR /> < 入力タイプ= "ファイル" /> < BR /> < 入力タイプ= "ファイル" 名= "ファイル" /> < BR /> < BR /> < 入力タイプ= "提出" 値= "送信" /> </ フォーム> </ ボディ> </ HTML >
uploadStatus.html:結果ページをアップロード
<!DOCTYPE HTML > < HTML LANG = "EN" のxmlns:目= "http://www.thymeleaf.org" > < 身体> < H1 >春ブーツ-アップロードステータス</ H1 > < divの目:もし= "$ {メッセージ}」> < H2 番目:テキスト= "$ {メッセージ}" /> </ DIV > </ ボディ> </ HTML >
5、バックグラウンドアップロードコントロールクラス
@Controller パブリック クラスUploadController { // ファイル格納ディレクトリ プライベート文字列upload_path =: "E // // TEMP" ; // ジャンプアップロードページの @RequestMapping( "/" ) パブリック文字列のインデックス(){ リターン "アップロード" ; } @GetMapping( "/詳細" ) パブリック文字列uploadMore(){ リターン "uploadMore" ; } // ファイルアップロード複数の @RequestMapping( "/ uploadMore" ) パブリック文字列moreFileUpload(@RequestParam( "ファイル")MultipartFile []ファイル、RedirectAttributes redirectAttrs){ 場合(files.length == 0 ){ redirectAttrs.addFlashAttribute( "メッセージ"、 "アップロードするファイルを選択してください" )。 戻る:「uploadStatusをリダイレクトします」。 } ため(MultipartFileファイル:ファイル){ 試みる{ バイト []バイト=用)(file.getBytesします。 パスパス = Paths.get(UPLOAD_PATH + file.getOriginalFilename())。 Files.write(パス、バイト)。 } キャッチ(IOExceptionを電子){ e.printStackTrace(); } } redirectAttrs.addFlashAttribute( "メッセージ" 、 "あなたは成功したすべてのファイルをアップロード" ); リターンは、「リダイレクト:/ uploadStatusを」。 } // 单个文件上传 @PostMapping( "/アップロード" ) パブリック文字列singleFileUpload(@RequestParam( "ファイル" )MultipartFileファイル、RedirectAttributes redirectAttrs){ 場合(file.isEmpty()){ redirectAttrs.addFlashAttribute( "メッセージ"、 " 「アップロードするファイルを選択してください)。 "リダイレクト:uploadStatusを" ; } 試す{ バイト []バイト= )(file.getBytesします。 パスパス = Paths.get(UPLOAD_PATH + file.getOriginalFilename())。 Files.write(パス、バイト)。 redirectAttrs.addFlashAttribute( "メッセージ" 、 "あなたは正常にアップロード'" + file.getOriginalFilename()+ "'" ); } キャッチ(IOExceptionを電子){ e.printStackTrace(); } 戻り "リダイレクト:/ uploadStatus" 。 } // 跳转结果页面 ( "/ uploadStatus" @RequestMapping ) パブリック文字列uploadStatus(){ リターン "uploadStatus" 。 } }
6、実行起動クラス: FileUploadWebApplication
ブラウザでは、に行きます:
複数のファイルのアップロード:
OK、正常にアップロード。