Заголовок Firefox и Content-Disposition - PullRequest
9 голосов
/ 06 февраля 2012

У меня проблема с именем вложения.Когда я звоню на сайт в Google Chrome, он возвращает файл с правильным именем и расширением.Я проверил это с Internet Explorer, и он тоже отлично работает.Проблема заключается только в Firefox.Я звоню на сайт, и он возвращает первое слово в заголовке файла и без расширения.

Например, если я хотел файл с именем «My report.docx», он получит файл с именем «My».Я погуглил, и оказалось, что это общая проблема с людьми, потому что браузеры читают заголовки по-разному.Они сказали, что исправление заключается в том, чтобы процитировать имя файла:

Content-Disposition: attachment; filename=My Report.docx

сейчас: (обратите внимание на кавычки)

Content-Disposition: attachment; filename="My Report.docx"

Однако, это не сработало для меня.

В chrome он вернул «My Report.docx» (фактически с кавычками).Firefox возвратил странный файл, который имел правильное расширение и правильное имя, но без кавычек, но не мог быть выполнен.Это был правильный размер файла, правильное расширение и правильное имя, но его нельзя было выполнить.Также он возвращает пробел до и после имени файла.

Ответы [ 2 ]

4 голосов
/ 27 ноября 2012

Я знаю, что это очень старый вопрос, но у меня недавно была такая же проблема.Решение состоит в том, чтобы либо

  1. кодировать имя файла в соответствии с RFC2184 , либо
  2. Если в имени файла нет специальных символов, укажите его в содержаниистрока расположения.

Поскольку вы уже пробовали 2, вы можете попробовать использовать 1 и посмотреть, как это работает.

Обычно я использую класс ContentDisposition для генерации моего заголовкадля меня:

Dim contentDispositionHeader = New Net.Mime.ContentDisposition() With {.FileName = filename}
Response.AddHeader("Content-Disposition", contentDispositionHeader.ToString())

Надеюсь, это поможет.

4 голосов
/ 06 февраля 2012

Это должно работать, как и ожидалось, вот еще один SOq с той же проблемой:

, а также страница Mozilla (я полагаю, вы ссылались на нее):

Я не знаю особенностей вашего кода на стороне сервера, но вот некоторые вещи, которые нужно подтвердить / попробовать:

  • Если у вас есть PHP, доступный на сервере, можете ли вы попробовать код по первой ссылке выше?Если нет, то вы, вероятно, сможете найти что-то в Сети на своем языке.Таким образом, вы можете проверить, есть ли проблема в вашем коде или где-то еще (настройка сервера, браузер и т. Д.)вон тот?Вы можете попробовать другие, чтобы подтвердить.
  • Это нормально работает в IE / Safari или другом браузере?Вы даже можете попробовать сделать это с помощью wget или curl из командной строки или что-то в этом роде.
  • Правильно ли вы предоставляете заголовок Content-Type?
  • Можете ли вы попробовать загрузить какой-либо другой файл или файл другого типа, например, .png или .xls?На самом деле, возможно, проще всего было бы попробовать простой текстовый файл (text/plain) и затем взять его оттуда.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...