Springmvc上传图片

一直想着做一下图片的上传,今天做了一个超级简单版,里面只包括几个核心步骤。

这里强调两点,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>

至此,最最简陋的上传完成了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值