2017-10-28 69 views
0

我有一个Meteor应用程序,我使用预先签名的URL从S3下载文件(需要使用API​​调用生成)。从没有弹出窗口拦截器的预签名URL下载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秒(低速互联网),那么选项卡将在下载开始前关闭。

如何更改此选项,以便在关闭选项卡之前等待下载发生?或者一个类似的解决方案,可以确保下载总是在没有弹出窗口阻止程序的情况下通过?

感谢

回答

1

你总是会,如果你打开一个新的窗口弹出窗口阻止程序的运行发生冲突。

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

那么你也不需要关闭一个计时器窗口(这是不是摆在首位的好办法)

+0

我甚至不知道在HREF中的'download'财产,这是凉! –

+0

是的,我最近才发现它。一个很好的功能。如果问题解决了您的问题,请将其标记为正确 – Mikkel

+0

感谢您的回答,问题是生成的URL仅在10秒内有效,作为安全防范措施......但我不知道“下载”属性或者非常感谢! – Sean

相关问题