From 575a8e3341c63d0e2094ab3e42a4aac7d9a5126f Mon Sep 17 00:00:00 2001 From: gaoxq <376340421@qq.com> Date: Thu, 2 Apr 2026 23:49:20 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E4=BA=91=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/filesystem/service/FileService.java | 3 ++ web-vue/src/api/request.js | 33 ++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/filesystem/service/FileService.java b/src/main/java/com/filesystem/service/FileService.java index 7344f06..1b3df39 100644 --- a/src/main/java/com/filesystem/service/FileService.java +++ b/src/main/java/com/filesystem/service/FileService.java @@ -14,6 +14,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; +import com.filesystem.utils.CommonUtil; +import com.filesystem.utils.FileUtil; + import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; diff --git a/web-vue/src/api/request.js b/web-vue/src/api/request.js index 10eb4f0..46a858a 100644 --- a/web-vue/src/api/request.js +++ b/web-vue/src/api/request.js @@ -20,8 +20,25 @@ request.interceptors.response.use( response => { const res = response.data - // 如果是二进制数据(blob),直接返回 + // 如果是二进制数据(blob),需要检查是否为错误响应 if (response.config.responseType === 'blob') { + // 检查 Content-Type,如果是 JSON 说明是错误响应 + const contentType = response.headers['content-type'] || '' + if (contentType.includes('application/json')) { + // 将 blob 转换为 JSON 并抛出错误 + return res.text().then(text => { + try { + const json = JSON.parse(text) + const error = new Error(json.message || '请求失败') + error.code = json.code + error.response = response + return Promise.reject(error) + } catch (e) { + return Promise.reject(new Error('请求失败')) + } + }) + } + // 真正的二进制数据,直接返回 return res } @@ -47,6 +64,20 @@ request.interceptors.response.use( error.code = data.code } + // 处理 blob 类型的错误响应 + if (data instanceof Blob) { + return data.text().then(text => { + try { + const json = JSON.parse(text) + error.message = json.message || '请求失败' + error.code = json.code + } catch (e) { + // 无法解析为 JSON + } + return Promise.reject(error) + }) + } + // 只有 401/403 才清理 token 并跳转登录页 // 但在登录页时不跳转(避免死循环),登录接口的 401 也不跳转 if (status === 401 || status === 403) {