Мне нужно иметь подкаталог с изображениями всех 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-скрипт).