系列文章目录
第一章 MVC模式
第二章 让程序run起来
第三章 @Controller、@RequestMapping 注解和获取请求参数
第四章 域对象、视图、转发和重定向
第五章 第五章 实现RESTful
第六章 MVC类型转换器、格式化器
第七章 JSON数据交互
第八章 拦截器实现权限验证、异常处理
第九章 文件上传、下载
第十章 使用logback+Slf4j打印日志
第十一章 单体架构任务调度
前言
使用commons-fileupload , commons-io 工具,实现上传、下载功能
1、环境搭建
1.1、导入依赖包
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
1.2、配置文件
<!--配置文件上传解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--设置上传文件的默认编码格式-->
<property name="defaultEncoding" value="UTF-8"></property>
<!--设置允许上传的最大长度-->
<property name="maxUploadSize" value="1024000"></property>
</bean>
<!--静态资源文件路径-->
<mvc:resources mapping="/uploadfile/**" location="/uploadfile/"/>
属性 | 说明 |
---|---|
defaultEncoding | 上传文件的默认编码格式。 |
maxUploadSize | 上传文件的最大长度(单位为字节)。 |
maxInMemorySize | 读取文件到内存中的最大字节数。 |
resolveLazily | 判断是否要延迟解析文件。 |
2、上传功能实现
2.1、html页面
<form th:action="@{/uploadfile}" method="post" enctype="multipart/form-data">
<input type="file" name="file" multiple="multiple"/>
<input type="submit" value="上传"/>
</form>
2.2、controller
@PostMapping("/uploadfile")
public String uploadfile(MultipartFile file,HttpServletRequest request){
if(!file.isEmpty()){
//原始文件名
String originalFilename = file.getOriginalFilename();
//文件扩展名
String fileType = originalFilename.substring(originalFilename.lastIndexOf("."));
//获取上传文件的路径
String realPath = request.getServletContext().getRealPath("/uploadfile/");
//创建上传文件的路径
File f = new File(realPath);
//判断文件夹是否存在
if(!f.exists()){
f.mkdir();
}
//上传后的文件名
String newFileName = UUID.randomUUID() + fileType;
//文件名传回前端
request.setAttribute("imgPath",request.getRequestURL()+"/" + newFileName);
try {
//持久化文件
file.transferTo(new File(realPath+newFileName));
} catch (IOException e) {
e.printStackTrace();
}
}
return "success";
}
3、下载功能实现
@RequestMapping("/downloadFile")
public ResponseEntity<byte[]> downloadFile(HttpServletRequest request,String fileName) throws IOException {
fileName = fileName.substring(fileName.lastIndexOf("/") + 1);
//得到图片的实际路径
String realFile = request.getServletContext().getRealPath("/uploadfile/") + fileName;
File file = new File(realFile);
byte[] bytes = FileUtils.readFileToByteArray(file);
//创建 HttpHeaders 对象设置响应头信息
HttpHeaders headers = new HttpHeaders();
//设置下载的方式和文件名称
headers.setContentDispositionFormData("attachment",fileName);
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
return new ResponseEntity<>(bytes, headers, HttpStatus.OK);
}
<a th:href="@{/downloadFile(fileName=${imgPath})}">下载</a>