本文文件上传最终实现的效果:将其他地方的文件复制到了项目的指定目录下。
SpringMVC中实现文件上传十分容易,MultpartiResolver用于处理上传请求,将上传请求包装成可以直接获取文件的数据,从而方便操作。下面介绍文件上传成功必要的条件:
1.导入相关依赖
如果是maven项目,直接导入这两个jar包
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency>
2.相关配置
如果你使用的是配置类@Configuration代替了XML配置的方式,那就在SpringMVCConfig类中进行文件上传的配置
设置字符集,这里要和jsp的编码格式一致,不然会存在乱码情况,推荐utf-8
设置最大单文件大小,这里设置20MB
@Bean
public MultipartResolver multipartResolver(){
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setMaxUploadSizePerFile(20*1024*1024);
multipartResolver.setDefaultEncoding("utf-8");
return multipartResolver;
}
如果使用的是XML配置方式
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="5000000" />
<property name="defaultEncoding" value="UTF-8" />
</bean>
3.前端页面
特别要注意一点,前端页面form表单enctype默认在发送前进行字符编码,但是如果我们要进行文件上传就不能在发送前进行字符编码,所以要把enctype设置成multipart/form-data
<form action="${pageContext.request.contextPath}/addshop" method="post" enctype="multipart/form-data">
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">商品</label>
<div class="layui-input-block">
<input type="file" id="test1" name="file">
</div>
</div>
</form>
效果图
4.后端接收
@RequsetParam里的值要和input标签的name值一致
@PostMapping( "/addshop")
public String test09(@RequestParam("file") MultipartFile multipartFile,HttpServletRequest request) throws IOException {
// 获取文件上传到具体文件夹的绝对路径
String realpath = request.getSession().getServletContext().getRealPath("upload");
// 获取上传的文件名
String fileName = multipartFile.getOriginalFilename();
// 根据路径构建文件对象
// 在构建过程中一定要注意路径问题
File uploadFile = new File(realpath, fileName);
// 判断指定文件夹uploadfiles是否存在,不存在就创建
if (!uploadFile.exists()) {
uploadFile.mkdirs();
}
// 上传文件
multipartFile.transferTo(uploadFile);
}
然后启动项目,文件就可以上传成功了。