文件下载方法(直接下载与请求下载)
直接下载:适用于简单场景,不发送请求直接使用浏览器获取文件
/**
* @description: 下载图片/文件
* @return {*}
*/
export const download = (url = '', newUrl) => {
const iframe = document.createElement('a');
if (newUrl) {
iframe.href = newUrl;
} else {
iframe.href = (window.DCIMAPP.downloadPrefix || '') + url;
}
iframe.download = document.cookie ? document.cookie.split('; ') : [];
document.querySelector('body').appendChild(iframe);
iframe.click();
document.querySelector('body').removeChild(iframe);
};
发送请求get/post:适合复杂的下载场景
export const filterexport = ({url = '', params, fun,method="post"}) => {
function getFileName(fileName, response) {
// 需要响应设置此header暴露给外部,才能获取到
let contentDisposition = response.headers['content-disposition'];
if (contentDisposition) {
// 正则获取filename的值
let filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
let matches = filenameRegex.exec(contentDisposition);
if (matches != null && matches[1]) {
fileName = matches[1].replace(/['"]/g, '');
}
// 通过 URLEncoder.encodeURIComponent(pFileName, StandardCharsets.UTF_8.name()) 加密编码的, 使用decodeURIComponent(fileName) 解密
// fileName = decodeURIComponent(fileName)
// 通过 new String(pFileName.getBytes(), StandardCharsets.ISO_8859_1) 加密编码的, 使用decodeURIComponent(escape(fileName)) 解密
var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
if (userAgent.indexOf('Safari') > -1 && userAgent.indexOf('Chrome') == -1) {
return fileName;
}
fileName = decodeURIComponent(escape(fileName));
}
return fileName;
}
let useUrl = '';
// iframe.href = (window.DCIMAPP.downloadPrefix || '') + url;
useUrl = (window.DCIMAPP.downloadPrefix || '') + url;
if (useUrl[0] == '/') useUrl = useUrl.substr(1);
axios({
url: window.DCIMAPP.bpmDomain + useUrl,
method: method,
formateResponse: () => {
return false;
},
handleResponse: (res, code, response) => {
return response;
},
responseType: 'blob',
data: params,
}).then((res) => {
if (res.data.type.split('/')[1] == 'json') {
const reader = new FileReader();
reader.readAsText(res.data, 'utf-8');
reader.onload = () => {
res = JSON.parse(reader.result);
if (res.code && res.code !== 100000) {
prompt.warn(res.msg);
}
};
return;
} else if (fun && res.data) {
fun();
prompt.success(intl.get('7d372ced-178d-485c-a1b1-3538c51700db').d('导出成功'));
}
const iframe = document.createElement('a');
let url = window.URL.createObjectURL(new Blob([res.data]));
let fileName = '';
fileName = getFileName(fileName, res);
iframe.download = fileName;
iframe.href = url;
document.querySelector('body').appendChild(iframe);
iframe.click();
document.querySelector('body').removeChild(iframe);
});
};
分类:
javascript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?