文件下载,会遇到三种格式的文件:file,blob,base64,而每种格式的文件,需要做的操作不尽相同,会带来很大困扰
如果上传的是blob或者base64的文件格式,想下载就需要先从url读取到文件内容。而js没有像php get_file_contents 一样的函数,可以选择用ajax去请求读取文件
$.ajax({
type:"GET",
url:url,
dataType: 'text',
success: function(json){
downloadFile(json, filename)
}
});
/**
* content base64格式数据
* fileName 文件名
*/
function downloadFile(content, fileName) {
let aLink = document.createElement('a');
let blob = base64ToBlob(content); //new Blob([content]);
let evt = document.createEvent("HTMLEvents");
evt.initEvent("click", true, true); //initEvent 不加后两个参数在FF下会报错 事件类型,是否冒泡,是否阻止浏览器的默认行为
aLink.download = fileName;
aLink.href = URL.createObjectURL(blob);
aLink.click();
};
如果直接是file格式的,可以尝试
function downByurl(url,fileName){
console.log(fileName)
const ele = document.createElement('a');
ele.setAttribute('href',url); //设置下载文件的url地址
ele.setAttribute('target' , '_blank');
ele.setAttribute('download' , fileName);//用于设置下载文件的文件名
ele.download = fileName;
ele.click();
}
下面也给出直接url下载blob格式的文件
function downloadWithBlob(url,filename) {
fetch(url).then(res => res.blob().then(blob => {
var a = document.createElement('a');
var url = window.URL.createObjectURL(blob);
a.href = url;
a.download = filename;
a.click();
window.URL.revokeObjectURL(url);
}));
}
到这里下载的部分也完成了