项目中的 图片的 下载方式
import { message } from 'antd';
/**
* 文件下载
* @param apiPromise promise 返回 接口返回的 文件 Blog
* @param fileName 下载的文件名
*/
function downloadFile (apiPromise, fileName) {
const hide = message.loading('导出中...', 0);
apiPromise.then(
response => {
//关闭提示
console.log('导出', response);
// if (response.type === 'application/vnd.ms-excel') {
if (response.type === 'application/vnd.ms-excel') {
if (!response) {
return;
}
let url = window.URL.createObjectURL(response);
let link = document.createElement('a');
link.style.display = 'none';
link.href = url;
link.setAttribute('download', fileName || '导出文件');
console.log(link);
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
//关闭 loading
hide();
setTimeout(()=>{
message.success('导出成功')
}, 1000);
} else {
console.log('导出发起失败');
//关闭 loading
hide();
setTimeout(()=>{
message.error('导出失败')
}, 1000);
}
}).catch(error => {
//关闭 loading
hide();
console.warn('导出错误:', error);
message.error('导出错误')
});
}
/**
*/
/**
* 多媒体 下载
* @param url
* @param fileName
* @param blobType 默认为 MIME 类型列表 详见 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
* 释: 图片的类型有多种 image/jpeg, image/png 。。。 等, 所有我们可以 通过传入 前半部分来(image) 确定是不是 下载了对应的文件
*/
function downloadEnhance(url, fileName='', blobType = 'image'){
const hide = message.loading('下载中...', 0);
var x = new XMLHttpRequest();
// x.open("GET", "http://danml.com/wave2.gif", true);
x.open("GET", url, true);
x.responseType = 'blob';
x.onload = function(e){
console.log(x);
if(x.response.type.includes(blobType)){
var url = window.URL.createObjectURL(x.response)
var a = document.createElement('a');
a.href = url;
a.download = fileName;
a.click();
//关闭 loading
hide();
setTimeout(()=>{
message.success('下载成功')
}, 1000);
}else {
console.log('下载发起失败');
//关闭 loading
hide();
setTimeout(()=>{
message.error('下载失败')
}, 1000);
}
}
x.send();
}
export { downloadEnhance }
export default downloadFile;
downloadFile 函数的调用方式 需要通过 axios 进行,返回一个 Promise 对象 ,
例如:
新建一个 request.js
引入 axios:
import axios from 'axios';
配置 axios:
//axios配置 export const instance = axios.create({ baseURL: serverUrl, // timeout: 5 * 1000, timeout: 10 * 1000, //withCredentials: true, //是否开启跨域 headers: { 'Content-Type': 'application/json' } });
下载 文件的get请求
/** * get请求 下载文件 * @param url 请求地址 * @param params url参数 * @return {Promise<AxiosResponse<T>>} */ export function getDown(url, params) { return instance.get(url, { params, responseType: 'blob' }); }
在其它文件的调用方法:
downloadFile( getDown('/api/....', {}'参数'), '我的下载' )
推荐使用 downloadEnhance 这个方法,直接根据说明直接调用即可
还得回去写项目 先写到这吧。
