目录
一、文件下载
使用ResponseEntity实现下载文件的功能
ResponseEntity:一种数据类型,用于返回服务器响应给浏览器的报文信息实体对象,可以定义返回的HttpStatus(状态码)和HttpHeaders(响应头) 和 响应体body
1、准备一个下载链接
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>测试文件上传和下载</title>
</head>
<body>
<a th:href="@{/testDown}">下载江疏影.jpeg</a>
</body>
</html>
2、在控制器中准备响应方法
@Controller
public class FileUpAndDownController {
@RequestMapping("/testDown")
public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException {
//获取ServletContext对象
ServletContext servletContext = session.getServletContext();
//获取服务器中文件的真实路径
String realPath = servletContext.getRealPath("/static/img/1.jpg");
// 创建输入流
InputStream is = new FileInputStream(realPath);
// 创建字节数组
byte[] bytes = new byte[is.available()];
// 将流读到字节数组中
is.read(bytes);
//创建HttpHeaders对象设置响应头信息
MultiValueMap<String, String> headers = new HttpHeaders();
//设置要下载方式以及下载文件的名字
headers.add("Content-Disposition", "attachment;filename=1.jpg");
//设置响应状态码
HttpStatus statusCode = HttpStatus.OK;
//创建ResponseEntity对象
ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(bytes, headers, statusCode);
//关闭输入流
is.close();
return responseEntity;
}
}
二、文件上传
1、添加依赖:将请求参数传来的对象转化为MultipartFile类型用于后续处理,需要用到这个jar包。
<!-- 上传文件依赖 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
2、要告知Spring文件解析器,才能将对象转化为MultipartFile类型的。
<bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
3、添加控制器方法。
@RequestMapping("/testUp")
public String testUp(MultipartFile photo, HttpSession session) throws IOException {
String fileName = photo.getOriginalFilename();
//处理文件重名问题
String hzName = fileName.substring(fileName.lastIndexOf("."));
fileName = UUID.randomUUID().toString() + hzName;
ServletContext servletContext = session.getServletContext();
//先获取photo这个文件夹
String photoPath = servletContext.getRealPath("photo");
//判断photo文件夹可存在,如果不存在就创建一个
File file = new File("photo");
if(!file.exists()){
file.mkdir();
}
String finalPath = photoPath + File.separator + fileName;
//实现上传功能
photo.transferTo(new File(finalPath));
return "success";
}