在IIS7中强制下载文件

Kev*_*don 2 iis iis-7 download content-disposition

使用IIS7,是否有办法强制客户端浏览器下载文件而不是尝试在浏览器中显示它?在我的情况下,我想强制浏览器下载所有MP4视频文件.

Kev*_*don 5

我在这篇博客中找到了答案.

使用IIS7 Url Rewrite模块,您可以更改Content-Disposition建议客户端浏览器应该下载的标头,而不是尝试显示该文件.

使用IIS管理器(以mp4为例)

  1. 确保已为IIS7启用URL重写模块
  2. 打开IIS7管理器
  3. 导航到要强制下载的站点(或子站点)
  4. 在功能视图中,选择Url Rewrite
  5. 在右侧栏中选择"查看前置条件"
  6. 添加以下前提条件
    1. 名称:FileIsMP4
    2. 使用:正则表达式
    3. 逻辑分组:全部匹配
    4. 合同输入: {REQUEST_FILENAME}
    5. 检查输入字符串是否匹配模式
    6. 图案: \.mp4$
  7. 返回URL Rewrite规则列表并添加以下出站规则
    1. 名称:强制下载MP4s
    2. 前提条件:FileIsMP4
    3. 匹配 - 匹配范围:服务器变量
    4. 匹配 - 变量名称:RESPONSE_Content-Disposition
    5. 匹配 - 变量值:匹配模式
    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>
Run Code Online (Sandbox Code Playgroud)