Я пытался реализовать "ссылку на загрузку" и поместить ее около одной из моей таблицы отчета так, чтобы пользователи могли загрузить файл 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', 'Управление Кэша', и т.д...
И когда я удаляю заголовок 'Управления Кэша' путем выполнения следующего:
del response.headers['Cache-Control']
Это работает в IE.
Таким образом, кажется, что IE испытывает затруднения при контакте с загружаемым файлом с набором 'Управления Кэша' к определенному значению.
Теперь, мой вопрос:
Почему web2py добавляет эти заголовки ответа, неявно? и возможно без способа выделить его?
есть ли какой-либо побочный эффект, когда я удаляю заголовок 'Управления Кэша' этот путь?
Заранее спасибо.
Я не уверен, какие заголовки управления кэшем отправляются/пересылаются, но в IE есть ошибка с загруженными файлами, которую вы испытываете.
Для IE, вы ДОЛЖНЫ включить кэширование. Когда IE загружает файлы (например, файлы Excel), в Excel они загружаются из каталога кэша, таким образом, если вы не кэшируете их, Excel (или другое ваше приложение) не сможет загрузить файл.
Eric Law (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-файл. Это помогло мне. [
]