我有一个 Meteor 应用程序,我在其中使用预签名 URL(需要通过 API 调用生成)从 S3 下载文件。
我遇到了弹出窗口阻止程序的问题,阻止使用 AWS-SDK 生成的 url 打开新选项卡,因此我将代码更改为以下内容:
downloadDocument(document, event) {
// open tab immediately to prevent popup blocker
const myNewTab = window.open();
// call method to generate url
Meteor.call('Events.Methods.Document.Download', { key: document.key, eventId: event._id }, (error, res) => {
if (error) { ... } // removed handle error code
// if url generated, set tab location to url
if (res) myNewTab.location.href = res;
// auto close the tab after 1 second
myNewTab.setTimeout(() => { myNewTab.close(); }, 1000);
});
}
此代码大部分工作正常,但感觉不是很干净。此外,如果 API 调用花费的时间超过 1 秒(网速较慢),则该选项卡将在下载开始前关闭
如何更改此设置,以便在关闭选项卡之前等待下载完成?或者一个类似的解决方案,可以让我确保下载始终顺利进行,而不会出现弹出窗口阻止程序的问题?
谢谢
最佳答案
如果您打开一个新窗口,您总是会遇到弹出窗口拦截器。
你应该做的是生成一个 <a href="my-custom-server-generated-url" download>
与 download
的链接属性,这将在不需要新窗口的情况下强制下载。
然后你也不需要关闭计时器上的窗口(这首先不是一个好方法)
关于javascript - 从没有弹出窗口拦截器的预签名 URL 下载 S3 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46992801/