需求:下载目标文件,其中目标文件是本地某个文件中的zip文件,如:D:/CODE/test.zip。
1. 代码示例:
/**
* 下载目标文件,其中目标文件是zip文件
*
* @param targetFile 目前文件
* @param response
* @return
*/
@GetMapping("/download")
@ApiOperation("下载目标文件,其中目标文件是zip文件")
public void download(@RequestParam String targetFile, HttpServletResponse response) {
// 读取目标zip文件,并利用response输出 D:\CODE\Git_dy
String folderPath = "D:/CODE/";
String filePath = folderPath + targetFile;
try (FileInputStream fileInputStream = new FileInputStream(filePath)) {
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=\"" + targetFile + "\"");
response.setHeader("Access-Control-Allow-Origin", "*");
File downloadFile = new File(filePath);
if (downloadFile.exists()) {
FileInputStream myStream = new FileInputStream(filePath);
IOUtils.copy(myStream, response.getOutputStream());
}
response.flushBuffer();
log.info("获取文件成功!");
} catch (IOException e) {
log.error(e.getMessage());
}
}
其中:IOUtils的包是:package org.apache.tomcat.util.http.fileupload
2. 代码解析:
在response.setHeader(name, value)方法中,name参数表示要设置的HTTP响应头的名称,value参数表示该响应头的值。HTTP响应头允许服务器向浏览器传递关于响应的一些元信息。
在包org.springframework.http下面:包含了各种请求头名称:如
以下是一些常见的HTTP响应头名称及其示例:
response.setHeader("Content-Type", "text/html; charset=UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=\"example.txt\"");
response.setHeader("Cache-Control", "max-age=3600");
response.setHeader("Expires", "Thu, 01 Dec 2023 16:00:00 GMT");
response.setHeader("Set-Cookie", "sessionid=123456789; Path=/; Secure; HttpOnly");
response.setHeader("Location", "https://www.example.com");
String contentType = HttpHeaders.CONTENT_TYPE;
String contentDisposition = HttpHeaders.CONTENT_DISPOSITION;
String cacheControl = HttpHeaders.CACHE_CONTROL;
String expires = HttpHeaders.EXPIRES;
String setCookie = HttpHeaders.SET_COOKIE;
String location = HttpHeaders.LOCATION;
- Content-Type: 指定响应体的MIME类型,告诉浏览器如何处理响应的内容。
- Content-Disposition: 设置下载的文件名和方式。通常用于文件下载时,指定文件名和打开方式。
- Cache-Control: 控制缓存的行为,例如缓存的有效时间和是否允许缓存。
- Expires: 设置响应的过期时间,用于控制浏览器是否需要重新请求资源。
- Set-Cookie: 设置一个HTTP Cookie,用于在客户端存储会话信息或其他数据。
- Location: 用于重定向,指示浏览器应该跳转到哪个URL。
"application/octet-stream"是一个通用的MIME类型,用于表示未知的二进制数据。在HTTP响应头中,如果服务器不知道要传输的数据的具体MIME类型,通常会使用"application/octet-stream"来表示通用的二进制数据类型。
HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN是一个HTTP响应头,用于实现跨域资源共享(Cross-Origin Resource Sharing,CORS)。CORS是一种机制,允许Web浏览器在同源策略限制下向不同源(域名、端口、协议)的服务器发送跨域请求。
- *: 表示允许任意源(任意域名、任意端口、任意协议)的请求访问资源,这样的配置允许所有网站访问资源,但可能会存在安全风险,不推荐在生产环境中使用。
- 具体的域名: 表示允许特定的域名访问资源,例如http://example.com,这样的配置只允许example.com域名的请求访问资源。