【Spring MVC】さまざまなフォーム部品の使用方法その2

概要

Spring MVCにてファイルのフォーム部品を扱う基本的な方法についてまとめた。
画面からファイル情報を送信するにはMultipartFileオブジェクトを使する。

 

前提

以下の記事の続きとなる。

あわせて読みたい

概要 Spring MVCにてさまざまなフォーム部品を扱う方法についてまとめた。 テキストボックス、ラジオボタン、チェックボックスなどを画面表示⇒POST送信⇒取得する方法について紹介する。   前提 Mavenプロ[…]

【Spring MVC】さまざまなフォーム部品の使用方法その1

 

ファイルアップロード設定

ファイルを扱うためには、Spring MVC で Servlet 3.0 以降の組み込みのマルチパート解析機能(StandardServletMultipartResolver )を使用する。
この機能を使用するには以下の流れで実装する。

①StandardServletMultipartResolverのBean定義
②web.xmlにファイルアップロードまわりの設定

 

Bean定義

StandardServletMultipartResolverをDIコンテナに登録するため、Bean定義ファイルに設定を追加する。

springMVCContext.xml


<!-- ファイルアップロード -->
<!-- Spring3.0以降で使用できるBean -->
<bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver" />

 

web.xml

ファイルアップロードまわりの設定を行う。

web.xml



<servlet>
	<servlet-name>app</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet
	</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:/META-INF/spring/springMVCContext.xml
		</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>

	<!-- ファイルアップロードに関する設定 -->
	<multipart-config>
		<!-- アップロードされるファイルの最大サイズ -->
		<max-file-size>10485760</max-file-size> <!-- ここでは10MB -->
		<!-- リクエスト全体の最大サイズ -->
		<max-request-size>20971520</max-request-size> <!-- ここでは20MB -->
		<!-- ファイルがディスクに一時保存されるサイズのしきい値 -->
		<file-size-threshold>0</file-size-threshold>
	</multipart-config>
</servlet>

 

もともと定義しているDispatcherServletの設定に、<multipart-config>タグで囲まれた設定を追加する。

 

ファイルアップロードの使用

StandardServletMultipartResolverまわりの設定を行うことでファイルアップロード機能が使用可能となる。

 

フォーム

画面から送られてきたファイル情報を取得するため、MultipartFile型のフィールドを定義する。

FooForm.java


// ファイル
private MultipartFile file;

 

画面

フォームタグにファイル送信用の設定を追加する。

input.jsp


<form:form modelAttribute="fooForm" class="mt-4" enctype="multipart/form-data">

 

enctype=”multipart/form-data”

上記を追加することで、ファイルをフォーム送信できる。

input.jsp


<tr>
	<th class="col-3">ファイル</th>
	<td class="col-7">
		<input type="file" name="file" />
	</td>
</tr>

 

<input type=”file” name=”file” />

フォームのファイル送信部品。

 

コントローラー

フォームオブジェクトから取得したMultipartFileは、例えば以下のように使用できる。

FooController.java


var file = form.getFile();
// ファイル名
var fileName = file.getOriginalFilename();
// ファイルサイズ
var size = file.getSize();
// コンテンツタイプ
var contentType = file.getContentType();
スポンサーリンク