2013-02-17 20 views
12

@Controllerと@RequestMappingでspring 3.1.2を使用して複数のファイルをアップロードしようとしています。HTML5複数ファイルフォーム機能を持つSpring MVC複数ファイルのアップロード

これは私が行ったことと私の設定です。

のHTML5形式:

<form action="addFileSystemImage.foo" method="post" enctype="multipart/form-data"> 

    <input class='fileInput' type="file" name="files[]" multiple="multiple" /> 

    <input type="text" value="13asdf12eadsf" name="locId"/> 

    <input type="submit" /> 

</form> 

コントローラ方法:

@RequestMapping(value="/publisher/addFileSystemImage.foo", method=RequestMethod.POST) 
public @ResponseBody List<UploadedFile> addFileSystemImage(@RequestParam("files[]") ArrayList<MultipartFile> files, String locId, HttpServletRequest request) { 

//do lotsa voodoo rocket science here to process the files 

} 

私のconf:

<mvc:annotation-driven /> 
<context:component-scan base-package="foo.package"></context:component-scan> 
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean> 

addFileSystemImage方法に着くんフォームを送信。 locId引数のデータはここにありますが、 "files"引数はバインドされていません。私が試した引数/フィールド名/引数型の組み合わせに関係なく、体系的にnullです。

HttpServletRequest引数は、org.springframework.web.multipart.support.DefaultMultipartHttpServletRequestであり、実際にファイルデータを保持するmultiPartFile属性を保持します。デバッグ中にその値を見てみると、私が...ここに確かにある...しかし、何とかそれは今...正しく

をステップデータバインディングを通過しなかった[]私のファイルを意味

{files[]=[[email protected]6afd7f9, [email protected]28c2811, [email protected]f9aaed7]} 

を与えます私はリクエストからデータを取得することができると私に教えてくれることを知っていますが、私はむしろこれを正しく動作させるために... Sringの方法です:)そして、MultipartFileのArrayListを適切に作成してください。

何か不足していますか?誰かが実際にこの仕事を正しく作ったのですか?このArrayList(または通常の配列)にデータを格納させるにはどうすればよいですか?

私はこの解決策の至る所に来た Spring MVC with ajax file upload and MultipartFile私はほとんど同じことをしますが、この解決法は私にとってはうまくいかないので間違っていなければなりません。

注:私はそれを1つのファイルのアップロードで動作させることができました。しかし、今日の私の挑戦は、一度に複数のファイルを取得することです。

助けてください。

ありがとうございます。

+9

"ファイル"引数をListまたはMultipart []ファイルとして宣言しようとしましたか?私はSpringのバッキングリストがArrayListであるとは思わないし、Springがメソッドの引数をバインドしようとするとキャストが失敗するかもしれない。 –

+0

私は過去にこのようなことをすることができました。私はあなたのpomにもcommons-fileuploadの依存関係を含める必要があることを覚えています。多分それを試してみませんか? – gerrytan

+0

愚かな私...それはリストと配列で動作しました...私はすべてのテスト中に何をしたのか分からなくてはなりませんでした...アレックスに感謝します。あなたはその質問に答えることができ、あなたが望むならば、私はあなたに指摘します。乾杯! – azpublic

答えて

0

commons-fileupload依存関係は含まれていますか?すでにアレックスのおかげであなたの答えを得ているが、

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

私はファイルアップロードをテストしたが、コントローラハンドラ

5

にパラメータの型としても、ArrayListので正常に動作し、私はちょうど少し詳しく説明したいと思います。 Springバインディングでは、フォームフィールドはHTMLの「名前」属性にバインドされます。フォームフィールドというファイル[](その構文で変数名を宣言し、その名前はファイルですが、宣言する型の配列です)にすることは不可能ですから、その場合の動作は要求内のデータを無視することです。このようMultipartFileなどのタイプを使用して

は、次の例のように「ファイル」という名前のリストまたは配列のいずれかを使用することができます。適切なゲッターとセッターで

private List<MultipartFile> files; 
private MultipartFile[] files; 

、あなたはそのファイルにアクセスし、変異させることができますリストに従って。

関連する問題