我需要有一个包含所有 PNG 图像的子目录,以便下载,而不是在浏览器窗口中打开。我使用 IIS 作为 Web 服务器。
有没有办法强制 PNG 可下载?
答案1
你需要做的是得到一个内容配置标头进入 HTTP 响应,告诉它将图像作为要下载的文件,如下所示:
Content-disposition: attachment; filename="someimage.png"
恐怕我不知道您如何在 IIS 上实现这一点。
在您的情况下,如果 IIS 无法为我提供处理标头的方法,我可能会通过脚本运行请求,该脚本会将我需要的标头附加到图像数据中。
答案2
您可以打开目录浏览(属性下的目录选项卡),并在该目录上添加以下标头(HTTP 标头选项卡)
Custom Header Name: Content-disposition
Custom Header Value: attachment
这会产生不良影响,即第一次点击通常会显示图像列表的文件夹时会弹出一个打开/保存对话框(您只需点击打开即可),然后每个图像也将受到相同的处理。
注意:通过 index.asp|aspx|jsp|php|whatever 页面来处理这个问题确实会更好,该页面可以提供图像并适当地设置标题 - 但是嘿,您要求的是 IIS 解决方案。
答案3
我知道的唯一方法是尝试混淆浏览器,使其认为返回的图像文件不是图像,从而强制下载。您可以使用一些服务器端编程来有效地混淆发送到浏览器的 png 文件的 content-type 标头,然后这应该会达到您想要的效果。
答案4
一般规则是,如果浏览器获取到一种它没有处理程序的内容类型,它将打开“另存为”对话框。
如果您使用 Apache,我建议仅在该文件夹中放置一个 .htaccess 文件,并且仅对该目录中的 png 文件执行否决。
即这样的:
AddType application/bin png
对于 IIS,我不知道您可以在哪里进行配置而不破坏所有 PNG 文件。
一种可能的解决方案是在系统上安装 Apache(可能是与 IIS 相同的系统),并让 IIS 将此图像文件夹的请求代理到 Apache,然后使用 htaccess 技巧强制下载它们。