3

У меня есть панель управления администратора, где пользователи admin могут установить несколько параметров, а затем нажать кнопку, чтобы запустить отчет. Отчет должен вернуть пользователю запрос на загрузку файла CSV.AngularJS CSV File Download from API

Я пользуюсь услугами ui-router и $resource. Тип заголовков ответов/тип mime устанавливается правильно, но CSV-файл возвращается как текст (без загрузки файла) обработчиком $resource.

Я попытался создать ссылку для загрузки напрямую, сформировав запрос от $scope, но, к сожалению, моя схема аутентификации API использует специальный токен заголовка HTTP, и его невозможно отправить в API (который также находится на другом подобласте) с помощью якорного тега, например, как этот:

<a href="http://example.com/admin/report/csv?usertype=1&days=5">Run</a> 

есть ли способ, чтобы начать загрузку файла строку, используя запрос XHR (с настраиваемым заголовком)?

ответ

4

Я использую специальный маркер заголовка, поэтому загрузка отчета по простой ссылке невозможна; запрос должен быть сделан через XHR. Мои две части решение:

  1. Возвращается данные CSV из API непосредственно в тексте, удаление файла attachment заголовки. Во всяком случае, это правильное решение, потому что он не позволяет REST JSON API не заботиться о загрузке файлов, которые являются концепцией браузера.

  2. Обернуто данные ответа API в Blob, а затем используется https://github.com/eligrey/FileSaver.js, чтобы инициировать загрузку файла.

Недостатком этого является необходимость в IE10 +, но это нормально в моем случае.

+0

Это кажется разумным, но у вас есть скрипка или сущность в качестве примера? или вы можете обновить ответ сценарием? спасибо –