Принудительно загрузить файл в IIS7

Используя IIS7, можно ли заставить клиентский браузер загружать файл, а не пытаться отобразить его в браузере? В моем случае я хочу заставить браузеры загружать все видеофайлы MP4.

2 ответа

Я нашел ответ из этого блога.

Используя модуль IIS7 Url Rewrite, вы можете изменить Content-Disposition заголовок, который будет предлагать загружать браузер, а не пытаться отобразить файл.

Использование IIS Manager (mp4 в качестве примера)

  1. Убедитесь, что вы включили модуль перезаписи URL для IIS7
  2. Откройте диспетчер IIS7
  3. Перейдите на сайт (или суб-сайт), с которого вы хотите принудительно загрузить файлы.
  4. В представлении "Функции" выберите "Перезаписать URL".
  5. В правом столбце выберите "Просмотр предварительных условий"
  6. Добавьте следующее предварительное условие
    1. Имя: FileIsMP4
    2. Использование: регулярные выражения
    3. Логическая группировка: соответствовать всем
    4. Входной вклад: {REQUEST_FILENAME}
    5. Проверьте, если входная строка: соответствует шаблону
    6. Шаблон: \.mp4$
  7. Вернитесь к списку правил перезаписи URL и добавьте следующее исходящее правило.
    1. Название: Force Download For MP4s
    2. Условие: FileIsMP4
    3. Match - соответствие области: переменная сервера
    4. Соответствие - имя переменной: RESPONSE_Content-Disposition
    5. Match - значение переменной: соответствует шаблону
    6. Match - Использование: Регулярные выражения
    7. Match - Pattern: .*
    8. Матч - Игнорировать Кейс - да
    9. Условия - Логическая группировка: Match All
    10. Условия - Вход: {REQUEST_FILENAME}
    11. Условия - Тип: соответствует шаблону
    12. Условия - Шаблон: (.*)\\([^/]+)\.mp4$
    13. Условия - Отслеживание групп захвата по условиям: да
    14. Действие - Тип действия: Переписать
    15. Действие - Свойства действия - Value: attachment; filename={C:2}.mp4
    16. Действие - заменить существующее значение серверной переменной: да
    17. Действие - Остановить обработку последующих правил: нет

Изменить Web.Config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        ...
        <rewrite>
            <outboundRules>
                <rule name="Forcing Download for MP4s" preCondition="FileIsMP4">
                    <match serverVariable="RESPONSE_Content-Disposition" pattern=".*" />
                    <conditions>
                        <add input="{REQUEST_FILENAME}" pattern="(.*)\\([^/]+)\.mp4$" />
                    </conditions>
                    <action type="Rewrite" value="attachment; filename={C:2}.mp4" />
                </rule>
                <preConditions>
                    <preCondition name="FileIsMP4">
                        <add input="{REQUEST_FILENAME}" pattern="\.mp4$" />
                    </preCondition>
                </preConditions>
            </outboundRules>
        </rewrite>
        ...
    </system.webServer>
</configuration>

Спасибо, это именно то, что мне было нужно. Я немного изменил его, чтобы добавить возможность указать, загружать файл или нет, добавив строку запроса "? Download=yes".

<outboundRules>
  <rule name="Force download with query string" preCondition="DownloadableFileTypes">
    <match serverVariable="RESPONSE_Content-Disposition" pattern=".*" />
    <conditions>
      <add input="{REQUEST_FILENAME}" pattern="(.*)\\([^/]+)\.(.+)$" />
      <add input="{QUERY_STRING}" pattern="^.*download=yes.*$" />
    </conditions>
    <action type="Rewrite" value="attachment; filename={C:2}.{C:3}" />
  </rule>
  <preConditions>
    <preCondition name="DownloadableFileTypes" logicalGrouping="MatchAny">
      <add input="{REQUEST_FILENAME}" pattern="\.mp3$" />
      <add input="{REQUEST_FILENAME}" pattern="\.pdf$" />
      <add input="{REQUEST_FILENAME}" pattern="\.doc$" />
      <add input="{REQUEST_FILENAME}" pattern="\.docx$" />
      <add input="{REQUEST_FILENAME}" pattern="\.xls$" />
      <add input="{REQUEST_FILENAME}" pattern="\.xlsx$" />
      <add input="{REQUEST_FILENAME}" pattern="\.mp4$" />
    </preCondition>
  </preConditions>
</outboundRules>

Другие вопросы по тегам