this is 4.2 update

This commit is contained in:
chen-xin-zhi 2025-04-05 16:38:24 +08:00
parent 82aef63706
commit 3711d70e5b

View File

@ -102,7 +102,7 @@ public class FileController {
@Operation(summary = "Web端文件上传服务器", description = "参数文件对象multipartFile), 业务类型(biz)权限管理员方法名uploadFile") @Operation(summary = "Web端文件上传服务器", description = "参数文件对象multipartFile), 业务类型(biz)权限管理员方法名uploadFile")
public BaseResponse<String> uploadFileToServe(@RequestPart("file") MultipartFile multipartFile, UploadFileRequest uploadFileRequest, HttpServletRequest request) throws IOException { public BaseResponse<String> uploadFileToServe(@RequestPart("file") MultipartFile multipartFile, UploadFileRequest uploadFileRequest, HttpServletRequest request) throws IOException {
// 校验用户是否登录 // 校验用户是否登录
userService.getLoginUser(request); // userService.getLoginUser(request);
// 校验文件 // 校验文件
validFile(multipartFile); validFile(multipartFile);
// 获取文件的保存路径 // 获取文件的保存路径
@ -142,12 +142,31 @@ public class FileController {
filePath = UPLOAD_DIR + "feiyi/img/" + filename; filePath = UPLOAD_DIR + "feiyi/img/" + filename;
} }
File file = new File(filePath); File file = new File(filePath);
// 清空response // 检查文件是否存在
response.reset(); if (!file.exists()) {
// 设置response的Header response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
}
// // 设置response的Header
response.setContentType("application/octet-stream"); response.setContentType("application/octet-stream");
response.addHeader("Content-Disposition", "inline;filename=" + URLEncoder.encode(file.getName(), StandardCharsets.UTF_8)); response.addHeader("Content-Disposition", "inline;filename=" + URLEncoder.encode(file.getName(), StandardCharsets.UTF_8));
response.setCharacterEncoding("UTF-8"); response.setContentLengthLong(file.length()); // 使用 setContentLengthLong 适应大文件
// 设置缓存相关的 HTTP
long lastModified = file.lastModified();
response.setDateHeader("Last-Modified", lastModified); // 文件最后修改时间
response.setHeader("Cache-Control", "public, max-age=86400"); // 缓存一天24小时
response.setHeader("ETag", String.valueOf(lastModified)); // 使用文件最后修改时间作为 ETag
// 检查浏览器缓存是否有效
String ifNoneMatch = response.getHeader("If-None-Match");
if (ifNoneMatch != null && ifNoneMatch.equals(String.valueOf(lastModified))) {
// 如果 ETag 匹配表示文件没有变化返回 304 Not Modified
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
return;
}
// 使用 BufferedInputStream BufferedOutputStream 提高性能 // 使用 BufferedInputStream BufferedOutputStream 提高性能
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file), BUFFER_SIZE); try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file), BUFFER_SIZE);
BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream(), BUFFER_SIZE)) { BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream(), BUFFER_SIZE)) {
@ -176,11 +195,16 @@ public class FileController {
filename = "feiyi/fonts/" + filename; // 字体路径 filename = "feiyi/fonts/" + filename; // 字体路径
String filePath = UPLOAD_DIR + filename; String filePath = UPLOAD_DIR + filename;
File file = new File(filePath); File file = new File(filePath);
// // 清空response
// response.reset(); // 检查文件是否存在
// 设置response的Header if (!file.exists()) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
}
// // 设置response的Header
response.setContentType("application/octet-stream"); response.setContentType("application/octet-stream");
response.addHeader("Content-Disposition", "attachment;filename=" + file.getName()); response.addHeader("Content-Disposition", "inline;filename=" + URLEncoder.encode(file.getName(), StandardCharsets.UTF_8));
response.setContentLengthLong(file.length()); // 使用 setContentLengthLong 适应大文件 response.setContentLengthLong(file.length()); // 使用 setContentLengthLong 适应大文件
// 设置缓存相关的 HTTP // 设置缓存相关的 HTTP
@ -189,8 +213,13 @@ public class FileController {
response.setHeader("Cache-Control", "public, max-age=86400"); // 缓存一天24小时 response.setHeader("Cache-Control", "public, max-age=86400"); // 缓存一天24小时
response.setHeader("ETag", String.valueOf(lastModified)); // 使用文件最后修改时间作为 ETag response.setHeader("ETag", String.valueOf(lastModified)); // 使用文件最后修改时间作为 ETag
// 检查浏览器缓存是否有效
String ifNoneMatch = response.getHeader("If-None-Match");
if (ifNoneMatch != null && ifNoneMatch.equals(String.valueOf(lastModified))) {
// 如果 ETag 匹配表示文件没有变化返回 304 Not Modified
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
return;
}
// 使用 BufferedInputStream BufferedOutputStream 提高性能 // 使用 BufferedInputStream BufferedOutputStream 提高性能
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file), BUFFER_SIZE); try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file), BUFFER_SIZE);