From 1c7695c06725b846bb07db0eecd7d580f2fc6d62 Mon Sep 17 00:00:00 2001 From: zlm133588 <13996255+zlm133588@user.noreply.gitee.com> Date: Mon, 14 Apr 2025 10:54:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E4=BA=86=E4=B8=80=E4=B8=8B=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AES-front/README.md | 2 +- AES-front/src/api/admin.js | 7 ++++ .../views/admin/problem/problem-review.vue | 2 +- .../controller/DownLoadFileController.java | 40 ++++++++++++++++++- 4 files changed, 47 insertions(+), 4 deletions(-) diff --git a/AES-front/README.md b/AES-front/README.md index 2486ee3..d3967bb 100644 --- a/AES-front/README.md +++ b/AES-front/README.md @@ -36,7 +36,7 @@ Node 安装 18 及以上 4. 导出功能的依赖 ```shell npm install xlsx file-saver -5. 展示图标的依赖 +5. 展示图表的依赖 ```shell npm install echarts diff --git a/AES-front/src/api/admin.js b/AES-front/src/api/admin.js index e39f9a0..3c3de98 100644 --- a/AES-front/src/api/admin.js +++ b/AES-front/src/api/admin.js @@ -63,6 +63,13 @@ export default { responseType: 'blob', params: config, }), + downloadAttachment: (config) => + request({ + url: '/downloadFile/downloadAttachment', + method: 'get', + responseType: 'blob', + params: config, + }), getAssistantByClassIdPage: (data) => request.post('/adminusers/getAssistantByClassIdPage', data), deleteClassAssistant: (data) => request.post('/assistantClass/deleteClassAssistant', data), findAdminuserByAccount: (data) => diff --git a/AES-front/src/views/admin/problem/problem-review.vue b/AES-front/src/views/admin/problem/problem-review.vue index a1d2c1b..d4903b4 100644 --- a/AES-front/src/views/admin/problem/problem-review.vue +++ b/AES-front/src/views/admin/problem/problem-review.vue @@ -143,7 +143,7 @@ const problemReviewValue=ref({ const down = async() =>{ try { - const res = await api.download({ + const res = await api.downloadAttachment({ fileName: problemReviewValue.value.attachment }) const contentDisposition = res.headers["content-disposition"] diff --git a/AES/src/main/java/com/example/aes/user/controller/DownLoadFileController.java b/AES/src/main/java/com/example/aes/user/controller/DownLoadFileController.java index 1fe0aa4..fd41bec 100644 --- a/AES/src/main/java/com/example/aes/user/controller/DownLoadFileController.java +++ b/AES/src/main/java/com/example/aes/user/controller/DownLoadFileController.java @@ -1,8 +1,9 @@ package com.example.aes.user.controller; import cn.hutool.core.io.FileUtil; - -import cn.hutool.core.io.resource.UrlResource; +import java.nio.file.Files; +import java.nio.file.Path; +import org.springframework.core.io.UrlResource; import com.example.aes.global.model.RespBean; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; @@ -86,6 +87,41 @@ public class DownLoadFileController { return RespBean.ok("importClassStudentModel"); } + @GetMapping("/downloadAttachment") + public RespBean downloadAttachment(String fileName, HttpServletResponse response) throws IOException { + // 设置响应头 + response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); + + // 构建文件路径(根目录下的 upload 目录) + String root = System.getProperty("user.dir"); // 获取项目根目录 + String filePath = root + File.separator + "upload" + File.separator + fileName; + File file = new File(filePath); + + // 检查文件是否存在 + if (!file.exists()) { + // 返回错误信息 + response.setStatus(HttpServletResponse.SC_NOT_FOUND); // 设置 HTTP 状态码为 404 + OutputStream outputStream = response.getOutputStream(); + outputStream.write(("文件未找到: " + fileName).getBytes()); + outputStream.flush(); + outputStream.close(); + return RespBean.error("文件未找到"); + } + + // 下载文件 + try (InputStream inputStream = new FileInputStream(file); + BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream); + OutputStream outputStream = response.getOutputStream()) { + byte[] buffer = new byte[1024]; + int bytesRead; + while ((bytesRead = bufferedInputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + outputStream.flush(); + } + return RespBean.ok(fileName); + } + @GetMapping("/downloadTestOut") public RespBean downloadTestOut(String fileNameOut, String fileNameIn, HttpServletResponse response) throws IOException{ String prefix = "dhuoj://";