javascript - 从没有弹出窗口拦截器的预签名 URL 下载 S3 文件

标签 javascript node.js meteor

我有一个 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/

相关文章:

javascript - 如何等待按钮点击才能与Vue.js进行交互内容?

javascript - 如何使用querySelector选择这个元素

javascript - 尝试这样做时警告框未关闭

javascript-在ajax调用中显示加载器并在成功后隐藏

javascript - 从 JSON 数据调用值时使用 fetch() 并获取 'Undefined'

meteor - 使用wercker管道测试meteor js/mocha挂起

node.js - Sequelize 与 sql 存储过程。在我的情况下我应该使用什么?

javascript - 将一组重叠的时间段合并到新的时间段中

javascript - Ionic 2 + Meteor 如何设置 DDP_DEFAULT_CONNECTION_URL

javascript - 客户端数据重绘/更新的 Meteor.js 事件