Назад | Перейти на главную страницу

Принудительно загружать PNG вместо открытия в браузере с IIS

Мне нужно иметь подкаталог с изображениями всех PNG для загрузки, а не открывать его в окне браузера. Я использую IIS для веб-сервера.

Есть ли способ заставить PNG загружаться?

Вы можете включить просмотр каталогов (вкладка "Каталог" в свойствах) и добавить в этот каталог следующий заголовок (вкладка "Заголовки HTTP")

Custom Header Name: Content-disposition
Custom Header Value: attachment

Это приведет к неудачному эффекту: при первом обращении к папке, в которой обычно отображается список изображений, появляется диалоговое окно «Открыть / сохранить» (вы можете просто открыть диалоговое окно), а затем каждое изображение также получит ту же обработку.

Примечание: это действительно лучше обрабатывается с помощью index.asp | aspx | jsp | php | любой страницы, которая будет обслуживать изображение и соответствующим образом устанавливать заголовки - но, эй, вы просили решение IIS.

Что вам нужно сделать, это получить заголовок размещения содержимого в ответ HTTP, чтобы он обрабатывал изображение как файл для загрузки, например:

Content-disposition: attachment; filename="someimage.png"

Боюсь, я точно не знаю, как бы вы это сделали в IIS.

В вашей ситуации, если IIS не смог предоставить мне способ работы с заголовком, я бы, вероятно, запустил запросы через скрипт, который вытолкнет данные изображения с прикрепленным заголовком, который мне нужен.

Единственный известный мне способ сделать это - попытаться ввести в заблуждение браузер, заставив думать, что возвращаемый файл изображения не является изображением, и, таким образом, принудить его к загрузке. Вы можете сделать это с помощью некоторого программирования на стороне сервера, чтобы эффективно скрыть заголовок типа содержимого файла png, отправленного в браузер, тогда это должно сделать то, что вы хотите.

Удалите тип Mime .PNG - Инструкции здесь для IIS 7

Общее правило состоит в том, что если браузер получает тип контента, у него нет обработчика, для него открывается диалоговое окно «Сохранить как».

Если бы вы использовали Apache, я бы предложил разместить файл .htaccess только в этой папке и заменять его только для файлов png только в этом каталоге.

Т.е. что-то вроде этого:

AddType application/bin png

Для IIS я не знаю, где вы можете настроить это, не нарушая все файлы PNG.

Одно из возможных решений - установить Apache в системе (возможно, в той же системе, что и IIS) и позволить IIS проксировать запросы для этой папки изображений на Apache и использовать трюк с htaccess для их принудительной загрузки.

Все решения, которые я пробовал, позволяют загружать его в других браузерах, кроме IE. IE пытается быть «полезным» и решает, что, по его мнению, лучше всего будет обслуживать клиента, в данном случае - отобразить файл png в браузере.

Как уже указывалось, всегда есть программный способ сделать это. Но я не собирался идти по этому пути.

В итоге я отдельно заархивировал 67 файлов PNG и связал с ними. Это некрасиво, но работает.

Спасибо всем за помощь.

Простой способ - обернуть файл PNG в файл PHP. Затем вы можете использовать перезапись URL-адреса, чтобы выбрать файлы * .png и перевести их в файл PHP (например, downloadpng.php? File = image.png):

<?php

header ('Content-disposition: attachment; filename="'.$_GET['file'].'"')
include ($_GET['file']);

?>

Мой PHP исключительно ржавый, но чего-нибудь в этом роде было бы достаточно. Возможно, лучше всего спросить в Stack Overflow о правильном синтаксисе.

Если вы не знаете, что такое перезапись URL-адреса, есть много мест, где вы можете найти в Google, что он делает, но в двух словах он берет URL-адрес браузера и повторно интерпретирует его на что-то еще до того, как он достигнет IIS, поэтому что пользователь видит один URL-адрес, а IIS - другой (именно так вы можете заставить файлы .png проходить через PHP-скрипт).