一直想着做一下图片的上传,今天做了一个超级简单版,里面只包括几个核心步骤。
这里强调两点,form的enctype一定要为"multipart/form-data",还有一点就是method要为post,如果不写method的话,在上传的时候会报服务器500错误,本人亲自踩坑发现的。
如果顺利进入controller其实核心步骤就如下几步:
这里注意:如果用的是MultipartFile可以不加@RequestParam注解,但是如果使用CommonsMultipartFile一定要加@RequestParam
public String uploadImage(HttpServletRequest request, @RequestParam("image") CommonsMultipartFile image) throws IOException {
//1.获取上传的文件的名字
String name = image.getOriginalFilename();
//2.在服务器创建图片保存路径,这里保存在webapp/res/文件夹下
String path = request.getSession().getServletContext().getRealPath("res/");
//3.在要保存的路径下新建file,这里创建file的方法是路径,名字
File file = new File(path,name);
//4.将图片复制到对应的路径下的file里
image.transferTo(file);
String after = path+name;
//获得文件存储路径可以存储到数据库里,而不是将图片存储到数据库里。
return after;
}
当然这是最最简陋的一个上传,各种校验和文件保存时候的校验都没有,可以自己拓展,多文件上传,就是把CommonsMultipartFile变为数组CommonsMultipartFile[]即可,然后可以循环上述操作即可。
2019-10-27更新:多图片上传时,如果直接使用CommonsMultipartFile[]接收,会报错,报错大致内容如下
"message":
"Failed to convert value of type 'java.util.LinkedList' to required type 'org.springframework.web.multipart.commons.CommonsMultipartFile[]'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile' to required type 'org.springframework.web.multipart.commons.CommonsMultipartFile': no matching editors or conversion strategy found",
应该是默认转换不了,具体什么原因如果哪位大神知道,可以留言告诉下,不过使用MultipartFile[]则可以正常接收到
Springmvc的配置文件中别忘记加这一句:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" >
<property name="maxUploadSize" value="10000000" />
</bean>
pom文件中别忘了加:
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
至此,最最简陋的上传完成了。