Принудительно загружать PNG вместо открытия в браузере с IIS
Мне нужно иметь возможность иметь подкаталог изображений, чтобы все PNG загружались, а не открывались в окне браузера. Я использую IIS для веб-сервера.
Есть ли способ заставить PNG быть загружаемым?
7 ответов
Что вам нужно сделать, это вставить заголовок размещения контента в HTTP-ответ, чтобы сказать ему, что нужно обрабатывать изображение как файл для загрузки, например:
Content-disposition: attachment; filename="someimage.png"
Боюсь, я не знаю точно, как бы вы сделали это на IIS.
В вашей ситуации, если IIS не предоставит мне способ работы с заголовком, я, вероятно, выполню запросы через скрипт, который вытолкнет данные изображения с прикрепленным заголовком.
Вы можете включить просмотр каталога (вкладка "Каталог" в свойствах) и добавить следующий заголовок в этот каталог (вкладка "Заголовки HTTP").
Custom Header Name: Content-disposition
Custom Header Value: attachment
Это приведет к неудачному результату первого попадания в папку, в котором обычно отображается список изображений, всплывающее диалоговое окно "Открыть / Сохранить" (вы можете просто нажать "Открыть"), а затем каждое изображение также получит ту же самую обработку.
Примечание: это действительно лучше обрабатывается с помощью index.asp|aspx|jsp|php| любой страницы, которая будет обслуживать изображение и правильно устанавливать заголовки - но, эй, вы запросили решение IIS.
Единственный способ, которым я знаю об этом, - попытаться сбить с толку браузер, заставляя его думать, что возвращаемый файл изображения не является изображением, и поэтому вызывает загрузку. Вы можете сделать это, используя некоторое программирование на стороне сервера, чтобы эффективно запутывать заголовок типа содержимого файла png, отправляемого в браузер, тогда это должно делать то, что вы хотите.
Все решения, которые я пробовал, делают так, чтобы они загружались в других браузерах, кроме IE. IE пытается быть "полезным" и решает, что, по его мнению, лучше всего подходит для сервера клиента, в данном случае это отображение png-файла в браузере.
Всегда существует программный способ сделать это, как было указано. Но я не собирался идти по этому пути.
В конце я по отдельности заархивировал 67 файлов PNG и связался с ними. Это не красиво, но это работает.
Спасибо всем за помощь.
Общее правило заключается в том, что если браузер получает тип контента, у него нет обработчика, поскольку он открывает диалоговое окно "Сохранить как".
Если бы вы использовали Apache, я бы предложил поместить файл.htaccess только в эту папку и отменять его только для файлов png только в этом каталоге.
Т.е. как то так:
AddType application/bin png
Для IIS я не знаю, где вы можете настроить это, не нарушая все файлы PNG.
Одно из возможных решений - установить Apache в системе (возможно, в той же системе, что и IIS) и разрешить IIS передавать запросы к этой папке изображений в Apache и использовать трюк с htaccess для принудительной загрузки их.
Самый простой способ - обернуть файл PNG в файл PHP. Затем вы можете использовать переписывание URL-адресов, чтобы выбрать файлы *.png и преобразовать их в файл PHP (например, downloadpng.php? File=image.png):
<?php
header ('Content-disposition: attachment; filename="'.$_GET['file'].'"')
include ($_GET['file']);
?>
Мой PHP исключительно ржавый, но чего-то такого будет достаточно. Может быть, лучше спросить у переполнения стека для правильного синтаксиса.
Если вы не знаете, что такое перезапись URL-адреса, есть много мест, где вы можете найти Google, чтобы узнать, что он делает, но в двух словах он берет URL-адрес браузера и повторно интерпретирует его как-то еще до того, как он достигнет IIS, поэтому что пользователь видит один URL, а IIS видит другой (именно так вы можете заставить файлы.png проходить через скрипт PHP).