Принудительно сохранять файлы во всех браузерах - не открывается в окне браузера - PullRequest
4 голосов
/ 03 апреля 2012

Мне нужно простое решение для работы во всех браузерах.

Для определенных типов файлов или целевых ссылок через класс: как я могу заставить их просто принудительно загружать во всех основных браузерах.

Я подумал, что нашел идеальное решение для сервера Apachce - добавив его в .htaccess.

http://css -tricks.com / snippets / htaccess / force-files-to-загрузить-не-открыть-в-браузере /

AddType application/octet-stream .csv
AddType application/octet-stream .xls
AddType application/octet-stream .doc
AddType application/octet-stream .avi
AddType application/octet-stream .mpg
AddType application/octet-stream .mov
AddType application/octet-stream .pdf

Кажется, работает в Firefox и Safari, но не в Chrome или IE (не проверял больше ничего)

Может любойодин, пожалуйста, помогите мне с решением о том, как сделать ссылки для принудительной загрузки файла, вместо того, чтобы открывать его в браузере, для ВСЕХ браузеров.

Кажется, я не могу найти полное решение для браузера.Разве это не возможно?

Любые ссылки на учебники или фрагменты будут великолепны.

Мой сайт, если он основан на PHP, может заставить его работать с PHP, если это возможно.

Спасибо

Ответы [ 3 ]

5 голосов
/ 03 апреля 2012

Установите заголовок Content-Disposition равным "attachment", например так (в PHP):

header('Content-Disposition: attachment');

Вы даже можете предложить имя файла для загрузки (если оно отличается от указанного в URL):

header('Content-Disposition: attachment; filename=file.ext');

Если вы хотите сделать это непосредственно на сервере Apache, попробуйте следующее:

<FilesMatch "\.(pdf|csv|xls)">
  Header set Content-Disposition attachment
</FilesMatch>

(вы можете добавить дополнительные расширения в шаблон FilesMatch)

Старайтесь избегать использования заголовка application / octet-stream, если можете, то есть если Content-Disposition работает без него. Это потому, что некоторые системы действительно обращают внимание на Content-Type и сохраняют его вместе с файлом. Для пользователя обычно лучше, если его система может определить правильный MIME-тип файла.

0 голосов
/ 02 февраля 2016
<FilesMatch "\.(?i:pdf)$">
  ForceType application/octet-stream
  Header set Content-Disposition attachment
</FilesMatch>

добавьте это в .htaccess (измените pdf на тот, который вам нужен) - в настоящее время он работает во всех протестированных мной браузерах (не тестировал оперу или сафари)

0 голосов
/ 03 апреля 2012

Предполагая, что $file содержит путь к вашему файлу, вот сценарий, который я часто использую для этого:

$file = 'file.gif'; // example
$filesize=filesize($file);

if ($filesize > 0) {
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers 
header("Content-Type: image/gif");
header("Content-Length: ".filesize($file));
header("Content-Disposition: attachment; filename=\"".basename($file)."\";" );

readfile($file);
}

Вы сталкиваетесь с проблемами на устройствах без файловой структуры (например, iPad / iPhone), ноВы можете удалить строку Content-Disposition, чтобы исправить это.

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