2

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

4

2 回答 2

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 重写规则列表并添加以下出站规则
    1. 名称:强制下载 MP4
    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>
于 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 回答