JavaScript实现文件下载并重命名的两种方案
作者:橙子时间:2026-10-23 13:43:46浏览:81
本文介绍JavaScript中实现文件下载并重命名的两种方法。第一种利用HTML5 a标签的download属性,适用于同源资源;第二种通过XMLHttpRequest获取Blob对象并保存,有效解决跨域下载时的重命名问题,提供完整的代码示例与注意事项。
引言
本文详细讲解了在JavaScript中实现文件下载并重命名的具体代码实例,内容包含详细的示例代码,对读者的学习或工作具有参考价值。
HTML5 download属性方案
首先介绍第一种方法,该方法源自HTML官方规范。
HTML5下载代码示例
<a href="/images/liang.jpg" rel="external nofollow" download="文件名称">
在HTML5标准中,a标签新增了filename属性,允许指定下载文件的名称,即通过download属性来定义保存时的文件名。
这种方法在同源访问时运行正常,但一旦涉及跨域请求,往往会遇到跨域错误,或者导致文件在当前页面直接打开而非下载,用户体验较差。
通用Blob下载方案
第二种方案则具有更高的通用性,能够解决跨域场景下的下载重命名需求。
通用下载代码示例
/**
* 获取 blob
* url 目标文件地址
*/
function getBlob(url) {
return new Promise(resolve => {
const xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'blob';
xhr.onload = () => {
if (xhr.status === 200) {
resolve(xhr.response);
}
};
xhr.send();
});
}
/**
* 保存 blob
* filename 想要保存的文件名称
*/
function saveAs(blob, filename) {
if (window.navigator.msSaveOrOpenBlob) {
navigator.msSaveBlob(blob, filename);
} else {
const link = document.createElement('a');
const body = document.querySelector('body');
link.href = window.URL.createObjectURL(blob);
link.download = filename;
// fix Firefox
link.style.display = 'none';
body.appendChild(link);
link.click();
body.removeChild(link);
window.URL.revokeObjectURL(link.href);
}
}
/**
* 下载
* @param {String} url 目标文件地址
* @param {String} filename 想要保存的文件名称
*/
function download(url, filename) {
getBlob(url).then(blob => {
saveAs(blob, filename);
});
}
总结
以上内容为本文的全部总结,希望能为读者的学习提供帮助,欢迎继续支持本站获取更多技术分享。
作者最新文章
JS脚本在App中运行报错怎么解决
2026-11-04 23:11:03
JS怎么使用padStart方法给数字补零
2026-11-04 11:12:03
JS是什么意思?JavaScript全称及基本定义
2026-11-04 08:05:29
JS 使用 toFixed(1) 保留一位小数的基本用法与注意事项
2026-11-03 18:34:57
JS字符串转整数:parseInt与Number的区别及用法
2026-11-03 17:26:54
