用js 触发 浏览器的下载功能下载文件

本文介绍了如何在JavaScript中触发浏览器的下载功能,特别是在页面内动态获取下载URL时。推荐在处理大型文件时使用FileSaver.js库。针对新开标签页下载和HTML5浏览器中的无闪动下载提供了代码示例,并引用了StackOverflow上的相关讨论。
部署运行你感兴趣的模型镜像

大型文件请考虑使用 filesaver.js

https://github.com/eligrey/FileSaver.js/

==============================================

 

 

主要解决页面内部动态获取下载文件url后,自动下载的问题。

 

新开一个标签页下载: window.open('url', '_blank');

这会导致屏幕新开标签页时的闪动,但浏览器兼容性好。

 

html5浏览器中, 可在本标签页中无闪动开启下载:

 

$('<a href="path_to_file" download="proposed_file_name">Download</a>')[0].click();
 
  • path_to_file is either an absolute or relative path,
  • proposed_file_name the filename to save to (can be blank, then defaults to the actual filename).

没有jquery时:

 

var a = document.createElement('a');
a.href = "path_to_file";
a.download = "proposed_file_name";
a.click();

 

 

 

 

 

 

参考文献:

http://stackoverflow.com/questions/11620698/how-to-trigger-a-file-download-when-clicking-an-html-button-or-javascript


http://stackoverflow.com/questions/5811122/how-to-trigger-a-click-on-a-link-using-jquery

 

您可能感兴趣的与本文相关的镜像

Qwen3-8B

Qwen3-8B

文本生成
Qwen3

Qwen3 是 Qwen 系列中的最新一代大型语言模型,提供了一整套密集型和专家混合(MoE)模型。基于广泛的训练,Qwen3 在推理、指令执行、代理能力和多语言支持方面取得了突破性进展

JavaScript 可以通过多种方式触发浏览器下载文件,具体实现取决于使用场景、请求方式(GET 或 POST)、是否需要传递参数,以及是否需要规避浏览器缓存等问题。以下是几种常见的方法。 ### 使用 iframe 触发下载 iframe 是一种较为稳定的方式,特别适用于 GET 请求,并且可以有效避免浏览器拦截问题。下面是一个使用 iframe 实现的下载函数示例: ```javascript function myFuncDownload(filename) { let iframe = document.createElement('iframe'); iframe.src = '/fs/getfile/' + encodeURIComponent(filename) + "/" + new Date().getTime(); iframe.style.display = 'none'; document.body.appendChild(iframe); iframe.addEventListener('load', function() { document.body.removeChild(iframe); }); } ``` 在该实现中,`encodeURIComponent` 用于对文件名进行编码,以避免特殊字符导致的 URL 错误,同时通过添加时间戳来规避缓存问题[^1]。 ### 使用 a 标签触发下载 HTML5 提供了 `download` 属性,使得通过 `<a>` 标签触发下载成为一种便捷的方式。该方式适用于已知文件 URL 的情况,并且可以自定义下载文件的名称。 ```javascript const fileUrl = 'http://xxxxxx'; const fileName = '我下载文件名称.txt'; const a = document.createElement('a'); a.href = fileUrl; a.download = fileName; document.body.appendChild(a); a.click(); document.body.removeChild(a); ``` 这种方式在现代浏览器中兼容性较好,但在某些浏览器或扩展插件的限制下,可能会被拦截,因此需要确保 `a` 元素被及时移除以避免页面污染[^2]。 ### 使用 Blob 和 URL.createObjectURL 下载文件 如果文件内容是通过 AJAX 获取的流数据(如从后端获取二进制数据),可以结合 `fetch` 和 `Blob` 对象实现下载: ```javascript fetch('/api/download', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ filename: 'example.txt' }) }) .then(response => response.blob()) .then(blob => { const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = 'example.txt'; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(url); }); ``` 该方式支持 POST 请求,并且可以处理流式响应。适用于需要传递复杂参数或处理大文件的场景[^3]。 ### 注意事项 - **GET 请求缓存问题**:GET 请求可能会被浏览器缓存,因此建议在 URL 中添加随机参数(如时间戳)以确保请求不被缓存。 - **跨域问题**:如果文件 URL 是跨域资源,某些浏览器可能限制 `download` 属性的行为。 - **兼容性**:`download` 属性在主流现代浏览器中广泛支持,但在移动端或某些旧版本浏览器中可能存在兼容性问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值