|
|
|
import { defHttp } from '@/utils/http/axios';
|
|
|
|
import { message } from 'ant-design-vue';
|
|
|
|
|
|
|
|
import * as streamSaver from "streamsaver"
|
|
|
|
import { getToken } from '@/utils/auth';
|
|
|
|
import { useGlobSetting } from '@/hooks/setting';
|
|
|
|
|
|
|
|
const { apiUrl } = useGlobSetting();
|
|
|
|
/**
|
|
|
|
* 下载文件
|
|
|
|
* @param url 文件路径
|
|
|
|
* @param fileName 文件名
|
|
|
|
* @param parameter
|
|
|
|
* @returns {*}
|
|
|
|
*/
|
|
|
|
export const downloadFile = (url, fileName?, parameter?) => {
|
|
|
|
return getFileblob(url, parameter).then((data) => {
|
|
|
|
if (!data || data.size === 0) {
|
|
|
|
message.warning('文件下载失败');
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (typeof window.navigator.msSaveBlob !== 'undefined') {
|
|
|
|
window.navigator.msSaveBlob(new Blob([data]), fileName);
|
|
|
|
} else {
|
|
|
|
let url = window.URL.createObjectURL(new Blob([data]));
|
|
|
|
let link = document.createElement('a');
|
|
|
|
link.style.display = 'none';
|
|
|
|
link.href = url;
|
|
|
|
link.setAttribute('download', fileName);
|
|
|
|
document.body.appendChild(link);
|
|
|
|
link.click();
|
|
|
|
document.body.removeChild(link); //下载完成移除元素
|
|
|
|
window.URL.revokeObjectURL(url); //释放掉blob对象
|
|
|
|
}
|
|
|
|
});
|
|
|
|
};
|
|
|
|
export const downloadResource = async (url, fileName,parameter) =>{
|
|
|
|
|
|
|
|
url = apiUrl + url+"?path="+encodeURIComponent(parameter.path)+"&fileName="+parameter.fileName
|
|
|
|
let filename = fileName
|
|
|
|
if (!fileName) {
|
|
|
|
filename = url.substring(url.lastIndexOf('/') + 1);
|
|
|
|
}
|
|
|
|
console.log(filename,'filename')
|
|
|
|
return fetch(url, {
|
|
|
|
method: 'GET',
|
|
|
|
cache: 'no-cache',
|
|
|
|
headers:{
|
|
|
|
Authorization: `Bearer ${getToken()}`,
|
|
|
|
// clientId: clientId,
|
|
|
|
},
|
|
|
|
|
|
|
|
}).then(res => {
|
|
|
|
const fileStream = streamSaver.createWriteStream(filename,{
|
|
|
|
//增加小视图,体现下载进度条与总大小
|
|
|
|
size : res.headers.get("content-length")
|
|
|
|
})
|
|
|
|
const readableStream = res.body
|
|
|
|
if (window.WritableStream && readableStream.pipeTo) {
|
|
|
|
return readableStream.pipeTo(fileStream)
|
|
|
|
}
|
|
|
|
window.writer = fileStream.getWriter()
|
|
|
|
const reader = res.body.getReader()
|
|
|
|
const pump = () => reader.read()
|
|
|
|
.then(res => res.done
|
|
|
|
? window.writer.close()
|
|
|
|
: window.writer.write(res.value).then(pump))
|
|
|
|
pump()
|
|
|
|
})
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* 下载文件 用于excel导出
|
|
|
|
* @param url
|
|
|
|
* @param parameter
|
|
|
|
* @returns {*}
|
|
|
|
*/
|
|
|
|
export const getFileblob = (url, parameter) => {
|
|
|
|
return defHttp.get(
|
|
|
|
{
|
|
|
|
url: url,
|
|
|
|
params: parameter,
|
|
|
|
responseType: 'blob',
|
|
|
|
timeout: 1000 * 60 * 5, // 5分钟超时
|
|
|
|
},
|
|
|
|
{ isTransformResponse: false }
|
|
|
|
);
|
|
|
|
};
|