У нас есть приложение 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, похоже, работает (то есть вывод на консоль предполагает, что сохранение файла прошло успешно), но мы не видим индикации загрузки файла в браузере.
Кто-нибудь реализовал загрузку большого потока файлов с помощью аутентификации токена на основе заголовка и как?