从预签名 URL 下载 S3 文件,无需弹出窗口拦截器

Sea*_*ean 3 javascript node.js meteor

我有一个 Meteor 应用程序,我使用预签名 URL 从 S3 下载文件(需要通过 API 调用生成)。

我遇到了弹出窗口拦截器的问题,阻止使用 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);
    });
}
Run Code Online (Sandbox Code Playgroud)

这段代码大部分工作正常,但感觉不太干净。此外,如果 API 调用时间超过 1 秒(网速慢),则该选项卡将在下载开始之前关闭

如何更改此设置,以便在关闭选项卡之前等待下载发生?或者类似的解决方案可以让我确保下载始终顺利进行,而不会出现弹出窗口阻止程序的问题?

谢谢

Mik*_*kel 5

如果您打开新窗口,您总是会遇到弹出窗口阻止程序。

您应该做的是生成一个<a href="my-custom-server-generated-url" download>与该download属性的链接,这将强制下载而不需要新窗口。

然后你也不需要关闭计时器上的窗口(这首先不是一个好方法)