展示如何使用 <a> 标签的 download 属性实现文件强制下载
当文件与网页在同一个域名下时,只需在 <a> 标签中添加 download 属性即可。
浏览器会强制下载文件,而不是在新标签页中打开它。
注意: download 属性仅在同源(Same-Origin)策略下有效。
如果文件位于不同的域名(如 CDN),浏览器通常会忽略该属性并直接打开文件。
此时需要配合后端设置 Content-Disposition: attachment 响应头,或使用 JavaScript Fetch API。
跨域链接示例:<a href="https://cdn.example.com/file.zip" download>
在大多数现代浏览器中,这只会打开新标签页,而不会触发下载对话框。
适用于跨域资源或动态生成的内容。通过 Fetch 获取二进制流,创建 Blob URL 触发下载。
async function downloadFile(url, filename) {
try {
const response = await fetch(url);
const blob = await response.blob();
const link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = filename;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
URL.revokeObjectURL(link.href); // 释放内存
} catch (error) {
console.error('Download failed:', error);
}
}
download 属性生效。Content-Disposition: attachment; filename="name"。application/octet-stream 可强制浏览器下载。download 属性支持有限,建议结合后端响应头或使用专门的 App 内下载逻辑。