Загрузка больших файлов в Angular с аутентификацией заголовка - PullRequest
0 голосов
/ 14 октября 2019

У нас есть приложение Angular 6, которое раньше загружало большие сгенерированные файлы из серверной части с использованием потоковой передачи, что означает, что ни серверная часть, ни клиент никогда не загружали весь файл в память, потому что эти файлы могли быть сотнями или тысячами МБ. Мы использовали следующие заголовки ответа:

Content-Disposition: attachment;filename=<generated filename>
Content-Type: text/csv; charset=utf-8

Мы использовали window.open(exportLink, '_blank'), который отлично работал при использовании аутентификации на основе файлов cookie. Теперь мы изменили токены на заголовки . Теперь бэкэнд возвращает 403 из-за отсутствующего заголовка.

Я понимаю, что использование любого из методов, таких как windows.open и windows.location, не поддерживает передачу заголовков.

Единственныйтогда можно будет использовать клиентский API (например, Angular HTTP client + FileSaver). Однако это не работает для больших файлов , поскольку оно достигнет предела памяти браузеров.

Мы пробовали StreamSaver вместе с клиентом Angular HTTP, который, кажется, не работает должным образом,Мы также пытались использовать браузер Fetch API вместе с Stream Saver.

Использование последнего, аналогичного примеру, представленному в репозитории StreamSaver, похоже, работает (то есть вывод на консоль предполагает, что сохранение файла прошло успешно), но мы не видим индикации загрузки файла в браузере.

Кто-нибудь реализовал загрузку большого потока файлов с помощью аутентификации токена на основе заголовка и как?

1 Ответ

0 голосов
/ 14 октября 2019

Одна вещь, которую вы можете попробовать - это одноразовый токен:

  • Добавить конечную точку при обычной аутентификации, которая будет возвращать ссылку в формате? Token = token
  • Добавить конечную точку загрузки ваутентификация с использованием одного токена для загрузки файлов (и удаления токена)

, когда вам нужно загрузить файл - сначала получите URL с использованием 1-й конечной точки, а затем загрузите его любым удобным для вас способом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...