文件上传
-
Spring MVC 为文件上传提供了直接的支持,这种支持是通过即插即用的 MultipartResolver 实现的。Spring 用Jakarta Commons FileUpload 技术实现了一个MultipartResolver 实现类:CommonsMultipartResovler
-
SpringMVC中默认是没有装配MultipartResovler类的,如果需要使用的SpringMVC中的上传文件需要手动进行配置
1.1相关依赖
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
1.2配置文件
配置文件上传解析类CommonsMultipartResolver
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--允许上传的文件最大大小 单位是byte-->
<property name="maxUploadSize" value="60000000"/>
<property name="defaultEncoding" value="UTF-8"/>
</bean>
1.3jsp前台页面
- 一定要是post请求
- enctype一定要写
- input标签的name属性和Controller的参数名要一致,不然会报null
<body>
<form method="post" action="${ctx}/upload" enctype="multipart/form-data" id="data-form" >
<input type="file" name="uploadFile"><br>
<button>提交</button>
</form>
</body>
1.4Controller
- MultipartFile 的参数名与前台的name属性一致
@RequestMapping("/insert")
public String insertProduct(HttpServletRequest request, @RequestParam("uploadFile") MultipartFile uploadFile)
{ //接受前台参数
Product product=new Product();
Map<String, String[]> parameterMap = request.getParameterMap();
MyBeanUtils.populate(product,parameterMap);
try {
//设置路径
product.setProductImg("pro/"+uploadFile.getOriginalFilename());
service.addProduct(product);
System.out.println(uploadFile.getName());//表单中的name名
System.out.println(uploadFile.getSize());//文件大小
System.out.println(uploadFile.getOriginalFilename());//获取文件名
File file = new File("C:\\ideaworksspace\\ssm-demo\\src\\main\\webapp\\img\\pro\\" + uploadFile.getOriginalFilename());
//保存文件到磁盘
uploadFile.transferTo(file);
} catch (Exception e) {
e.printStackTrace();
}
findAll(request);
return "goods";
}
1.5注意
解决idea Tomcat文件上传后图片无法显示
- 原因分析:idea有缓存,也就是target,里面没有这个资源,重启可以解决,这样很麻烦,但img包中有新上传的图片。
- 解决方案:在tomcat里配置一下路径
选择一下要放资源的文件夹
- 访问方式
<img src="pro/luck.png">
相应的存储图片的路径发生变化,就可以成功显示。