提交修改

This commit is contained in:
zlwu committed 2025-08-03 17:38:03 +08:00
1 parent 1e361a44ca
commit ac8a58386c
10 files changed
+765 -33

No files matched your search

+33 -15
View File
@@ -5,6 +5,7 @@ import { blobValidate } from '@/utils/ruoyi';
import { LoadingInstance } from 'element-plus/es/components/loading/src/loading.mjs';
import { globalHeaders } from '@/utils/request';
import { getFileDownloadUrl } from '@/api/system/file';
import request from '@/utils/request';
const baseURL = import.meta.env.VITE_APP_BASE_API;
let downloadLoadingInstance: LoadingInstance;
@@ -12,16 +13,23 @@ export default {
async oss(ossId: string | number) {
downloadLoadingInstance = ElLoading.service({ text: '正在获取文件访问链接,请稍候', background: 'rgba(0, 0, 0, 0.7)' });
try {
// 使用新的安全下载方法
const { data: downloadUrl } = await getFileDownloadUrl(Number(ossId));
// 使用新的安全下载方法,避免Number()转换导致的大整数精度丢失
// const { data: downloadUrl } = await getFileDownloadUrl(String(ossId));
// 使用fetch下载文件
const response = await fetch(downloadUrl);
if (!response.ok) {
throw new Error('下载失败');
const response = await request({
url: "/resource/oss/download/" + ossId,
method: 'get',
responseType: 'blob',
timeout: 300000 // 300秒超时
});
// 由于axios响应拦截器对blob类型响应直接返回blob数据
// 这里response直接就是blob对象,而不是包含data属性的响应对象
const blob = response;
// 验证响应数据
if (!blob) {
throw new Error('响应数据为空');
}
const blob = await response.blob();
const filename = response.headers.get('content-disposition')?.split('filename=')[1]?.replace(/"/g, '') || `file_${ossId}`;
FileSaver.saveAs(blob, decodeURIComponent(filename));
@@ -35,18 +43,27 @@ export default {
// 新增:安全下载文件方法
async secureOss(ossId: string | number, fileName?: string) {
console.log(ossId, fileName);
downloadLoadingInstance = ElLoading.service({ text: '正在获取文件访问链接,请稍候', background: 'rgba(0, 0, 0, 0.7)' });
try {
// 获取临时下载URL
const { data: downloadUrl } = await getFileDownloadUrl(Number(ossId));
// 获取临时下载URL,避免Number()转换导致的大整数精度丢失
// const { data: downloadUrl } = await getFileDownloadUrl(String(ossId));
// 使用fetch下载文件
const response = await fetch(downloadUrl);
if (!response.ok) {
throw new Error('下载失败');
const response = await request({
url: "/resource/oss/download/" + ossId,
method: 'get',
responseType: 'blob',
timeout: 300000 // 300秒超时
});
// 由于axios响应拦截器对blob类型响应直接返回blob数据
// 这里response直接就是blob对象,而不是包含data属性的响应对象
const blob = response;
// 验证响应数据
if (!blob) {
throw new Error('响应数据为空');
}
const blob = await response.blob();
const finalFileName = fileName || response.headers.get('content-disposition')?.split('filename=')[1]?.replace(/"/g, '') || `file_${ossId}`;
FileSaver.saveAs(blob, decodeURIComponent(finalFileName));
@@ -66,6 +83,7 @@ export default {
method: 'get',
url: url,
responseType: 'blob',
timeout: 300000 ,// 300秒超时
headers: globalHeaders()
});
const isBlob = blobValidate(res.data);