SpringMVCでのファイルアップロード

旧ブログ(blog.ogaclejapan.com)から移行してきた古い記事です。 移行に伴い、一部のレイアウトが崩れている可能性もありますmm

Author's Avatar mini

Masaki Ogata

AuthorMasaki Ogata

Published

最近ファイルアップロードを使う機会があったので忘れぬうちにメモしておく。

主なポイントは3つ

  • CommonsMultipartResolverのDI定義を追加する
  • formタグにenctype属性を追加する
  • Controllerのメソッド引数にRequestParamアノテーションを宣言する

CommonsMultipartResolverのDI定義を追加する

MVC系View定義がされているところあたりのDIに以下のBean定義を追加する。

<bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="100000"/>
</bean>

id属性のmultipartResolverはSpringさんが認識するための決まりごとなので、 誤って違う名前で宣言しないように注意すること!

また、CommonsMultipartResolverは内部でapacheのcommons-fileupload.jarを使用しているので、pomの依存ライブラリとして以下の宣言が含まれている確認しておくこと。

<dependency>
	<groupId>commons-fileupload</groupId>
	<artifactId>commons-fileupload</artifactId>
	<version>1.2.2</version>
</dependency>

formタグにenctype属性を追加する

multipartデータであることを伝えるためにはenctype="multipart/form-data"という属性をformタグに宣言する。

<form method="post" action="/fileupload" enctype="multipart/form-data">
	<input type="file" name="fileupload">
</form>

Controllerのメソッド引数にRequestParamアノテーションを宣言する

ファイルアップロードを受け取るメソッドに対して、MultipartFile型の引数を加えて@RequestParamアノテーションでformタグに定義したnameを指定すればおk。

@Controller
public class FileuploadController {
	@RequestMapping(value="/fileupload", method=RequestMethod.POST)
	public void fileupload(@RequestParam("fileupload") MultipartFile file) {
		//file未選択時もnull値ではないため、サイズ0比較で検証するのがよさげ
		if (file.getSize() > 0) {
			System.out.println(file.getOriginalFilename());
		}
	}
}
Author's Avatar

Masaki Ogata ( a.k.a. ogaclejapan )

5年間ほどAndroidアプリ開発者へ型変換していましたが、Designも含めてサービス開発に必要な技術をすべて吸収していきたいマン。WebとBackendの記憶を只今アップデート中 :P

もし気に入っていただけたら記事シェアのご協力をお願いします!!