Загрузите файл S3 с предварительно подписанного URL без блокировщика всплывающих окон

1

У меня есть приложение Meteor, где я загружаю файлы с S3, используя предварительно подписанные URL (необходимо создать с помощью вызова API).

У меня возникла проблема с блокировщиками всплывающих окон, препятствуя открытию новой вкладки с URL-адресом, созданным 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 секунды (медленный интернет), то вкладка закрывается до начала загрузки

Как я могу изменить это, чтобы дождаться загрузки, прежде чем закрыть вкладку? Или аналогичное решение, которое привело бы к тому, что загрузка всегда проходила без блокировщиков всплывающих окон?

Спасибо

Теги:
meteor

1 ответ

2

Если вы откроете новое окно, вы всегда будете сталкиваться с блокировками всплывающих окон.

Что вам нужно сделать, это создать ссылку <a href="my-custom-server-generated-url" download> с download, которая заставит загружать без необходимости нового окна.

Тогда вам также не нужно закрывать окно на таймере (что было не очень хорошим подходом в первую очередь)

  • 0
    Я даже не знал о свойствах download в hrefs, это круто!
  • 0
    Да, я обнаружил это только недавно. Хорошая особенность. Пожалуйста, отметьте ответ как правильный, если он решил вашу проблему
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню