From 5b383c8741aba9c22ffe9c42b104a8fa81b96d4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E4=BF=8A?= <873019219@qq.com> Date: Sat, 10 Apr 2021 20:19:26 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20=E6=97=A5=E5=BF=97=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E6=AD=A3=E5=B8=B8=E4=B8=8B=E8=BD=BD=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zfile/controller/admin/LogController.java | 5 ++- .../controller/home/LocalController.java | 2 -- .../java/im/zhaojun/zfile/util/FileUtil.java | 34 +++++++++++++++++-- 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/src/main/java/im/zhaojun/zfile/controller/admin/LogController.java b/src/main/java/im/zhaojun/zfile/controller/admin/LogController.java index ba716ea..04cc538 100644 --- a/src/main/java/im/zhaojun/zfile/controller/admin/LogController.java +++ b/src/main/java/im/zhaojun/zfile/controller/admin/LogController.java @@ -9,7 +9,6 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import javax.servlet.http.HttpServletResponse; import java.io.File; import java.util.Date; @@ -26,14 +25,14 @@ public class LogController { * 系统日志下载 */ @GetMapping("/log") - public ResponseEntity downloadLog(HttpServletResponse response) { + public ResponseEntity downloadLog() { if (log.isDebugEnabled()) { log.debug("下载诊断日志"); } String userHome = System.getProperty("user.home"); File fileZip = ZipUtil.zip(userHome + "/.zfile/logs"); String currentDate = DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"); - return FileUtil.export(fileZip, "ZFile 诊断日志 - " + currentDate + ".zip"); + return FileUtil.exportSingleThread(fileZip, "ZFile 诊断日志 - " + currentDate + ".zip"); } } \ No newline at end of file diff --git a/src/main/java/im/zhaojun/zfile/controller/home/LocalController.java b/src/main/java/im/zhaojun/zfile/controller/home/LocalController.java index 64a5593..76c91ec 100644 --- a/src/main/java/im/zhaojun/zfile/controller/home/LocalController.java +++ b/src/main/java/im/zhaojun/zfile/controller/home/LocalController.java @@ -32,8 +32,6 @@ public class LocalController { * * @param driveId * 驱动器 ID - * - * @return 文件 */ @GetMapping("/file/{driveId}/**") @ResponseBody diff --git a/src/main/java/im/zhaojun/zfile/util/FileUtil.java b/src/main/java/im/zhaojun/zfile/util/FileUtil.java index eada1fb..d22c5e5 100644 --- a/src/main/java/im/zhaojun/zfile/util/FileUtil.java +++ b/src/main/java/im/zhaojun/zfile/util/FileUtil.java @@ -23,7 +23,13 @@ import java.util.Date; @Slf4j public class FileUtil { - public static ResponseEntity export(File file, String fileName) { + /** + * 文件下载,单线程,直接传 + * @param file 文件对象 + * @param fileName 要保存为的文件名 + * @return 文件下载对象 + */ + public static ResponseEntity exportSingleThread(File file, String fileName) { if (!file.exists()) { return ResponseEntity.status(HttpStatus.NOT_FOUND).body("404 FILE NOT FOUND"); } @@ -58,6 +64,30 @@ public class FileUtil { * @param file 下载的文件 */ public static void export(HttpServletRequest request, HttpServletResponse response, File file) { + export(request, response, file, file.getName()); + } + + /** + * 返回文件给 response,支持断点续传和多线程下载 + * @param request 请求对象 + * @param response 响应对象 + * @param file 下载的文件 + * @param fileName 下载的文件名,为空则默认读取文件名称 + */ + public static void export(HttpServletRequest request, HttpServletResponse response, File file, String fileName) { + if (!file.exists()) { + try { + response.getWriter().write("404 FILE NOT FOUND"); + } catch (IOException e) { + e.printStackTrace(); + } + } + + if (StringUtils.isNullOrEmpty(fileName)) { + //文件名 + fileName = file.getName(); + } + String range = request.getHeader(HttpHeaders.RANGE); String rangeSeparator = "-"; @@ -102,8 +132,6 @@ public class FileUtil { //要下载的长度(endByte 为总长度 -1,这时候要加回去) long contentLength = endByte - startByte + 1; - //文件名 - String fileName = file.getName(); //文件类型 String contentType = request.getServletContext().getMimeType(fileName);