2

IIS7 を使用して、クライアント ブラウザにファイルをブラウザ内で表示するのではなく、強制的にダウンロードさせる方法はありますか? 私の場合、ブラウザーに強制的にすべての MP4 ビデオ ファイルをダウンロードさせたいと考えています。

4

2 に答える 2

5

このブログから答えを見つけました。

IIS7 Url Rewrite モジュールを使用すると、Content-Dispositionヘッダーを変更して、クライアント ブラウザーがファイルを表示するのではなく、ダウンロードする必要があることを示唆できます。

IIS マネージャーの使用 (例として mp4)

  1. IIS7 の URL 書き換えモジュールが有効になっていることを確認してください
  2. IIS7 マネージャーを開く
  3. ダウンロードを強制するサイト (またはサブ サイト) に移動します。
  4. 機能ビューで、[URL 書き換え] を選択します。
  5. 右側の列で [前提条件を表示] を選択します。
  6. 次の前提条件を追加します
    1. 名前: FileIsMP4
    2. 使用: 正規表現
    3. 論理グループ化: すべて一致
    4. 条件入力:{REQUEST_FILENAME}
    5. 入力文字列のチェック: パターンに一致
    6. パターン:\.mp4$
  7. ルールの URL 書き換えリストに戻り、次のアウトバウンド ルールを追加します。
    1. 名前: MP4 の強制ダウンロード
    2. 前提条件: FileIsMP4
    3. 一致 - 一致するスコープ: サーバー変数
    4. 一致 - 変数名: RESPONSE_Content-Disposition
    5. Match - 変数値: パターンに一致
    6. 一致 - 使用: 正規表現
    7. 一致 - パターン: .*
    8. 一致 - 大文字と小文字を区別しない - はい
    9. 条件 - 論理グループ: すべて一致
    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>
于 2013-10-16T13:26:56.203 に答える
-1

ありがとう、これはまさに私が必要としていたものです。少し調整して、「?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>

于 2017-02-02T23:26:00.113 に答える