文件上传,即处理 multipart 形式的数据。
原生 servlet 处理上传的文件数据的,springmvc 又是对 serlvet 的封装。
1、所需 jar 包
<!-- 文件上传所需 jar 坐标 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
2、配置文件上传解析器
springmvc.xml 配置中:
<!-- 配置文件上传解析器,id 是固定的 multipartResolver -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传大小,单位字节 -->
<property name="maxUploadSize" value="1000000000"/>
</bean>
3、前端 Form
<%--
1 method="post"
2 enctype="multipart/form-data"
3 type="file"
--%>
<form method="post" enctype="multipart/form-data" action="/demo/upload">
<input type="file" name="uploadFile"/>
<input type="submit" value="上传"/>
</form>
4、后台接收 Handler
@RequestMapping("upload")
public String upload(MultipartFile uploadFile, HttpServletRequest request)
throws IOException {
// 文件原名,如 xxx.jpg
String originalFilename = uploadFile.getOriginalFilename();
// 获取文件的扩展名,如 jpg
String extendName = originalFilename.substring(
originalFilename.lastIndexOf(".") + 1,
originalFilename.length());
String uuid = UUID.randomUUID().toString();
// 新的文件名字
String newName = uuid + "." + extendName;
String realPath = request.getSession().getServletContext()
.getRealPath("/uploads");
// 解决文件夹存放文件数量限制,按日期存放
String datePath = new SimpleDateFormat("yyyy-MM-dd")
.format(new Date());
File floder = new File(realPath + "/" + datePath);
if(!floder.exists()) {
floder.mkdirs();
}
uploadFile.transferTo(new File(floder,newName));
return "success";
}
文章内容输出来源:拉勾教育Java高薪训练营;