我想用@Controller和@RequestMapping使用弹簧3.1.2上传多个文件。春季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
}
我的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参数的数据在这里,但“文件”参数没有绑定。无论我尝试过的参数/字段名称/参数类型的组合如何,它都是系统化的。
HttpServletRequest参数是一个org.springframework.web.multipart.support.DefaultMultipartHttpServletRequest,它包含一个multiPartFile属性,它实际上包含文件数据。看着它在调试值给我
{files[]=[[email protected]6afd7f9, [email protected]28c2811, [email protected]f9aaed7]}
这意味着我的文件[]的确是在这里...但不知何故,没有通过正确的数据绑定步骤...
现在...我知道你会告诉我,我可以从请求中检索数据...但我宁愿让这个工作正常...... Sring的方式...... :)并让我的ArrayList的MultipartFile正确填充。
我缺少的东西?有没有人真正做到这一点?我能做些什么来让这个ArrayList(或者甚至是一个常规的数组)被填充?
我来到这个解决方案 Spring MVC with ajax file upload and MultipartFile它与我做的事情几乎一样,但显然我必须做错事,因为这个解决方案不适合我。
注意:我确实设法使用单个文件上传。但我今天的挑战是一次获得多个文件。
任何帮助表示赞赏。
在此先感谢。
您是否尝试将“files”参数声明为List或Multipart []文件?我不认为Spring支持列表是一个ArrayList,并且当Spring尝试绑定方法参数时可能会失败。 – 2013-02-17 19:13:32
我设法得到了这样的工作在过去。我记得你还必须在你的pom中包含commons-fileupload依赖。也许试试? – gerrytan 2013-02-18 04:10:50
愚蠢的我......它和List和Array一起工作......我一定失去了在所有测试过程中所做的事......感谢Alex。你可以回答这个问题,如果你愿意,我会给你点。干杯! – azpublic 2013-02-18 08:19:53