2013-02-17 6 views
12

Я пытаюсь загрузить несколько файлов с помощью Spring 3.1.2 с помощью @Controller и @RequestMapping.Загрузка нескольких файлов MVC с несколькими файлами в формате HTML5

Вот что я сделал и свою конфигурацию.

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 

} 

мой конф:

<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 way ... :) и правильно заполнил мой ArrayList из MultipartFile.

Я что-то упустил? Кто-нибудь действительно сделал эту работу должным образом? Что я могу сделать, чтобы заполнить этот ArrayList (или даже обычный массив)?

Я пришел через это решение Spring MVC with ajax file upload and MultipartFile, что делает практически то же самое, что и я, но, очевидно, я должен делать что-то неправильно, так как это решение не работает для меня.

Примечание: Мне удалось заставить его работать с отдельными файлами. Но сегодня моя задача - получить сразу несколько файлов.

Любая помощь приветствуется.

Заранее спасибо.

+9

Вы пытались объявить аргумент «файлы» как список или многостраничные файлы? Я не думаю, что список поддержки Spring является ArrayList, и, возможно, сбой происходит, когда Spring пытается связать аргументы метода. –

+0

Мне удалось получить что-то подобное в прошлом. Я помню, что вы также должны включать в свой pom. Может, попробуй? – gerrytan

+0

Глупо мне ... Это работало со списком и массивом ... Я, должно быть, потерял следы того, что я сделал на протяжении всего тестирования ... Спасибо Алекс. Вы можете ответить на вопрос, и я дам вам точку, если вы захотите. Приветствия! – azpublic

ответ

0

Включены ли вы в общественную собственность?

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

Я тестировал FileUpload отлично работает даже с ArrayList в качестве типа параметра на обработчик контроллера

5

Хотя вы уже получили ответ на свой вопрос, благодаря Алекс, я просто хотел бы разработать немного. С привязкой Spring поля формы привязаны к своим атрибутам «name» в HTML. Так как невозможно иметь поле формы с именем файлов [] (если объявить имя переменной с этим синтаксисом, его имя - это файлы, но это массив типа объявления), Spring не смог бы его сопоставить - и поведение в этом случае состоит в том, чтобы игнорировать данные в запросе.

Использование такого типа как MultipartFile, вы можете использовать либо список с именем «файлы» или массив в следующих примерах:

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

С соответствующими добытчиками и сеттеров, вы можете доступ и мутировать файл список соответственно.