以前都是直接用windows.location.href 然后标签添加个download就可以,
后来发现苹果浏览器这样不能下载,反而在浏览器中把文件直接给打开了。
解决方法如下
(1)如果是后台返回了文件的数据,则前台文件中直接引入这个js,然后直接调用下面的方法就可以了。js下载地址点这里,分别是数据,文件名,文件格式,常见文件格式看本文最后
download(data, strFileName, strMimeType);
(2)如果是后台只返回了一个url,那么也是先引用刚刚下载的js,然后用下面代码获取到data并下载。即
// 下载含有url的文件
function downloadUrlFile(url, fileName) {
const url2 = url.replace(/\\/g, '/');
const xhr = new XMLHttpRequest();
xhr.open('GET', url2, true);
xhr.responseType = 'blob';
//如果希望文件名就是url斜杠最后的部分,则加上下面两行代码,fileName参数传url就行
//var index = fileName .lastIndexOf("\/");
//fileName = fileName .substring(index + 1, fileName .length);
// 为了避免大文件影响用户体验,建议加loading
xhr.onload = () => {
if (xhr.status === 200) {
// 获取文件blob数据并保存
download(xhr.response, fileName, "text/csv" );
}
};
xhr.send();
}
(3)常见的文件格式我在其他博主的博文中看到了
https://blog.csdn.net/zhuyu19911016520/article/details/88714289