Вопрос

Я пытался реализовать «ссылку для скачивания» и поместить ее рядом с одной из таблиц отчета, чтобы пользователи могли загрузить 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.Мне это помогло.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top