Content-Disposition: вложение не запускает диалог загрузки
я столкнулся с неожиданным поведением при попытке создать функциональность загрузки файлов на моем сервере NodeJS.
У меня есть REST (express) API, который вызывает некоторую функцию экспорта данных, которая создает CSV-файл на сервере и использует res.download('path/to/file')
для запуска загрузки.
Заголовки ответов включают
Content-Disposition:attachment; filename="indicators.csv"
Content-Length:30125
Content-Type:text/csv; charset=UTF-8
таким образом, все, кажется, в порядке.
дело в том, что я получаю ответ от сервера в виде обычного текста. В ответе есть все данные CSV-файла содержит, но не запускает диалоговое окно загрузки файла браузера, как я намеревался. Я пробовал как на Chrome, так и на FF. Проблема сохраняется в обоих.
какие идеи?
обновление
мне удалось заставить его работать, создав фиктивную форму и используя ее действие submit для вызова AJAX. Но это грязный хак, и я все еще ищу более элегантное решение.
3 ответов
заголовки не проблема. Вопрос в том, что вы запрашиваете URL-адрес загрузки через ajax
вызов, который не будет вызывать диалоговое окно загрузки браузера. Ваши варианты сводятся к следующему:
используйте форму, отправленную на url-адрес загрузки. Вместо того, чтобы иметь видимую форму, с которой пользователь должен взаимодействовать, создайте форму с
JavaScript
и отправьте его программно, вызвавform.submit
-загрузка файла дескриптора из ajax постточка
window.location
к url загрузки. Вы можете сделать это в текущем окне - загрузить файл с помощью ajax-запроса , или в новую - res.download () не работает в моем случае
вы можете попробовать использовать другой тип контента, так что он не будет открыт в качестве текстового файла в браузере:
Content-Type:application/ms-excel; charset=UTF-8
Другой альтернативой может быть использование application / octet-stream в качестве MIME-типа для определения его как загружаемого файла без лучшего описания.
Content-Type:application/octet-stream; charset=UTF-8
вопрос похож на этот
показать диалоговое окно "Сохранить как" при загрузке файла из Iframe через PHP
основная идея-это второй вариант, который роман описал выше, но этот использует iframe для его достижения.