湖州项目前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
2.5 KiB

12 months ago
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();
12 months ago
/**
*
* @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) =>{
12 months ago
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()
})
}
12 months ago
/**
* 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分钟超时
12 months ago
},
{ isTransformResponse: false }
);
};