Javascript 如何触发从a href手动下载文件

Javascript 如何触发从a href手动下载文件,javascript,jquery,Javascript,Jquery,我需要从返回base64格式文件数据的API获取文件。我将其添加到 因此,我想使用$(“#myFile”)触发文件下载。单击(),这将进入downloadFile()函数,但我不能使用location.href,因为我不希望页面被重定向 这项要求是否有其他选择?任何建议都会大有帮助 注意:单击链接后,我会通过一些ajax响应动态获取href值,最初href设置为#,并将替换为适当的可下载字符串,如上所述。我希望触发文件下载的事件与触发ajax请求的事件相同,而不是单独的单击事件。您只需使用下载

我需要从返回base64格式文件数据的API获取文件。我将其添加到

因此,我想使用
$(“#myFile”)触发文件下载。单击()
,这将进入
downloadFile()
函数,但我不能使用location.href,因为我不希望页面被重定向

这项要求是否有其他选择?任何建议都会大有帮助


注意:单击链接后,我会通过一些ajax响应动态获取href值,最初href设置为#,并将替换为适当的可下载字符串,如上所述。我希望触发文件下载的事件与触发ajax请求的事件相同,而不是单独的单击事件。

您只需使用
下载
属性-无需JS

<a id="myFile" href="data:image/png;base64,..." download>Download File</a>


您只需使用
下载属性-无需JS

<a id="myFile" href="data:image/png;base64,..." download>Download File</a>


ajax请求完成后,只需在DOM中创建、单击并删除一个新链接。应该有用

这里是一个链接到一个


注意:如果存在跨源请求,浏览器可能不支持在“下载”属性中设置的文件名。

只需在ajax请求完成后在DOM中创建、单击并删除一个新链接即可。应该有用

这里是一个链接到一个

注意:如果存在跨源请求,浏览器可能不支持在“下载”属性中设置的文件名。

如果您在页面中包含,则可以执行以下操作

fetch(url).then(res => res.blob()).then(blob => saveAs(blob, 'filename.txt'))
如果您在页面中包含,那么您可以执行以下操作

fetch(url).then(res => res.blob()).then(blob => saveAs(blob, 'filename.txt'))


这不是我所看到的。我在最初的请求中添加了一条注释。我的实际请求是下载带有ajax请求的文件。Ajax请求ad下载文件应该发生在同一个单击事件中。我仍然认为您应该添加下载属性(还有一个名称),并在创建链接的href时调用
myFile。单击()
,在Ajax完成时自动下载该文件初始值为
,然后单击页面重新加载,这不是他想要的。他有一个脚本集,可以在第一次单击时更改href值,这就需要使用默认值。。所以他不能使用download属性。download是一个HTML5标签,在很多旧版本中都不起作用。这不是我现在看到的。我在最初的请求中添加了一条注释。我的实际请求是下载带有ajax请求的文件。Ajax请求ad下载文件应该发生在同一个单击事件中。我仍然认为您应该添加下载属性(还有一个名称),并在创建链接的href时调用
myFile。单击()
,在Ajax完成时自动下载该文件初始值为
,然后单击页面重新加载,这不是他想要的。他有一个脚本集,可以在第一次单击时更改href值,这就需要使用默认值。。因此他不能使用download属性。download是一个HTML5标记,在许多旧版本中都不起作用。浏览器支持有限。这是一个铬唯一的解决方案。。您还可以将应用程序类型从
data:image/png
替换为
data:application/octet-stream
。。它强制浏览器下载,而不是导航到href值。这也可能会下载bin文件。无论使用什么方法,都必须给它一个名称和文件类型。这真的奏效了。是否有任何方法使其成为多浏览器。只要在常规的回答中提到它,你就会把它记对。谢谢你的帮助。我想你应该在标题中手动切换到自动。手动意味着用户必须单击链接以保存有限的浏览器支持。这是一个铬唯一的解决方案。。您还可以将应用程序类型从
data:image/png
替换为
data:application/octet-stream
。。它强制浏览器下载,而不是导航到href值。这也可能会下载bin文件。无论使用什么方法,都必须给它一个名称和文件类型。这真的奏效了。是否有任何方法使其成为多浏览器。只要在常规的回答中提到它,你就会把它记对。谢谢你的帮助。我想你应该在标题中手动切换到自动。手动意味着用户必须单击链接以保存它不需要将base64 url转换为对象url谢谢!更新。我在看他们是如何被对待的。这让我感到困惑。没有必要将base64 url转换为对象url谢谢!更新。我在看他们是如何被对待的。这让我有些困惑。