从没有弹出窗口阻止程序的预签名URL下载S3文件

时间:2017-10-28 17:58:36

标签: javascript node.js meteor

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

我遇到了弹出窗口阻止程序的问题,导致无法使用AWS-SDK生成的网址打开新标签,因此我将代码更改为以下内容:

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秒(慢速互联网),则选项卡将在下载开始之前关闭

如何在关闭标签之前更改此设置以便我可以等待下载?或者一个类似的解决方案,这将导致我确保下载始终没有弹出窗口阻止程序成为一个问题?

由于

1 个答案:

答案 0 :(得分:2)

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

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

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