2017-10-28 72 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

相關問題