Spring MVC的多文件上传与HTML5多种文件格式的功能(Spring MVC multipl

2019-08-17 00:40发布

我想上传使用弹簧3.1.2 @Controller和@RequestMapping多个文件。

这就是我所做的和我的配置。

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[]=[org.springframework.web.multipart.commons.CommonsMultipartFile@16afd7f9, org.springframework.web.multipart.commons.CommonsMultipartFile@728c2811, org.springframework.web.multipart.commons.CommonsMultipartFile@4f9aaed7]}

这意味着我的文件[]的确是在这里...但不知何故,没有通过正常的数据绑定步骤...

现在...我知道你会告诉我,我可以检索请求的数据...但我宁愿这个工作正常...的SRING方式...... :),并有我的MultipartFile的ArrayList的正确填充。

我缺少的东西吗? 有没有人实际上妥当作出这项工作? 我能做些什么有此ArrayList(甚至是普通阵列)填充?

我来到翻过这一解决方案的Spring MVC使用Ajax文件上传和MultipartFile因为我但显然我必须做一些错误的,因为该解决方案是不工作对我来说这确实几乎同样的事情。

注:我还是设法得到它与单文件上传工作。 但今天我的挑战是同时获得多个文件。

任何帮助表示赞赏。

提前致谢。

Answer 1:

虽然你已经得到了你的答案感谢Alex,我只是想详细一点。 随着春天的结合,表单域绑定到他们的“名字”属性的HTML。 因为它是不可能有一个表单字段命名的文件[](如果一个宣布与语法一个变量名,它的名字是文件,但它是声明类型的数组),弹簧不能匹配起来-和在这种情况下的行为是无视在请求中的数据。

使用这样的类型MultipartFile,你可以使用一个列表命名为“文件”或数组作为下面的例子:

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

通过适当的getter和setter方法,你就可以访问并相应地发生变异的文件列表。



Answer 2:

拥有包括公地文件上传依赖?

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

我测试的文件上传工作正常,即使ArrayList中作为控制器处理函数的参数类型



文章来源: Spring MVC multiple file upload with HTML5 multiple file form feature