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 )

デザイン含めてアプリ開発に必要な技術をすべて吸収していきたいマン。アプリをコネコネしながらハッピ-エンドを探求しております \(^o^)/ Happy Coding!

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