«ссылка для скачивания» не работает в IE
-
22-09-2019 - |
Вопрос
Я пытался реализовать «ссылку для скачивания» и поместить ее рядом с одной из таблиц отчета, чтобы пользователи могли загрузить CSV-файл и открыть его с помощью таких приложений, как Excel.
Записи генерируются динамически на основе запросов пользователей.
Итак, где-то в моем контроллере есть что-то вроде:
response.headers['Content-Type'] = 'text/csv'
response.headers['Content-Disposition'] = 'attachment; filename=xxx.csv'
return response.stream(dynamically_generated_csv, request=request)
Это работает как в FireFox, так и в Chrome, но не работает в IE.
Когда я распечатал заголовки ответов, я обнаружил, что web2py добавил к моему ответу несколько заголовков: «Expires», «Cache-Control» и т. д.
И когда я удаляю заголовок «Cache-Control», выполнив следующие действия:
del response.headers['Cache-Control']
Это работает в IE.
Похоже, что у IE возникли проблемы с работой с загружаемым файлом, в котором для параметра Cache-Control установлено определенное значение.
Теперь мой вопрос:
Почему web2py неявно добавляет эти заголовки ответов?а может быть без возможности его отключить?
есть ли какой-либо побочный эффект, когда я таким образом удаляю заголовок «Cache-Control»?
Заранее спасибо.
Решение
Я не уверен, какие заголовки управления кэшем отправляются/отправлялись, но в IE есть ошибка с загруженными файлами, с которой вы сталкиваетесь.
Для IE вы ДОЛЖНЫ включить кеширование.Когда IE загружает файлы (например.Excel), в Excel они загружаются из каталога кэша, поэтому, если вы не кэшируете его, Excel (или другое ваше приложение) не сможет загрузить файл.
Эрик Лоу (MSFT) по теме: http://blogs.msdn.com/ieinternals/archive/2009/10/02/Internet-Explorer-cannot-download-over-HTTPS-when-no-cache.aspx
Обновлять:Однако если вы просто хотите принудительно загрузить...напримерне загружать IE файл Excel внутри окна IE...затем обязательно установите полные заголовки для вложения.
//PHP style
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="downloaded.pdf"');
Другие советы
Ссылка для скачивания использует https (ssl)?Если да, то IE не сможет обработать загрузку, если она настроена на кэширование.Это известная проблема IE.
Это не отвечает на ваш вопрос, но, я надеюсь, решает исходную проблему.
Я бы просто добавил временную метку (что-то достаточно уникальное) для запроса строки ссылки на файл CSV.Мне это помогло.