强制PNG下载,而不是使用IIS在浏览器中打开

我需要能够有一个图像的子目录所有PNG的下载,而不是在浏览器窗口中打开。 我正在使用IIS的Web服务器。

有没有办法强制PNG可以下载?

你需要做的是获得一个内容处置标题到HTTP响应告诉它把图像作为一个文件下载,就像这样:

Content-disposition: attachment; filename="someimage.png" 

恐怕我不知道如何在IIS上完成这个任务。

在你的情况下,如果IIS无法为我提供一种处理标题的方法,我可能会通过一个脚本运行这些请求,这个脚本会将我需要的标题压出来。

您可以打开目录浏览(属性下的目录选项卡),并在该目录(HTTP标题选项卡)上添加以下标题

 Custom Header Name: Content-disposition Custom Header Value: attachment 

这将有不幸的效果,使文件夹,通常会显示图像列表popup一个打开/保存对话框(你可以打开),然后每个图像也将得到同样的待遇的第一个命中。

注意:通过index.asp | aspx | jsp | php |可以更好地处理这个图像,并且适当地设置标题 – 但是,嘿,你需要一个IIS解决scheme。

我知道这样做的唯一方法是试图混淆浏览器,认为返回的图像文件不是图像,所以强制下载。 你可以使用一些服务器端编程来做到这一点,以有效地混淆发送到浏览器的png文件的内容types头,这应该做你想做的。

删除.PNG Mimetypes – 这里指示IIS 7

一般的规则是,如果浏览器获得内容types,则没有处理程序,将打开“另存为”对话框。

如果您使用的是Apache,我build议只在该文件夹中放置一个.htaccess文件,并且仅在该目录中将其仅用于png文件。

即这样的事情:

 AddType application/bin png 

对于IIS,我不知道在哪里可以configuration,而不会打破所有的PNG文件。

一个可能的解决scheme是在一个系统上安装一个Apache(也许和IIS一样的系统),并让IIS将这个图像文件夹的请求代理到Apache,并使用htaccess的技巧强制下载它们。

我已经尝试过的所有解决scheme,以便它可以在除IE以外的其他浏览器下载。 IE试图“有帮助”,并决定它认为最好的服务器客户端,在这种情况下是在浏览器中显示PNG文件。

正如所指出的那样,总是有这样的程序化的方式。 但我并不想走这条路。

最后,我个人压缩了67个PNG文件并链接到这些文件。 这不是漂亮,但它的作品。

感谢所有的帮助。

一个简单的方法是将PNG文件包装在一个PHP文件中。 然后,您可以使用URL重写来获取* .png文件并将其转换为PHP文件(例如downloadpng.php?file = image.png):

 <?php header ('Content-disposition: attachment; filename="'.$_GET['file'].'"') include ($_GET['file']); ?> 

我的PHP是特别生锈的,但沿着这些线就足够了。 也许最好在Stack Overflow上询问正确的语法。

如果你不知道什么URL重写,有很多地方你可以谷歌找出它的作用,但简而言之,它需要一个浏览器的URL,并重新解释到其他东西之前到达IIS,所以用户看到一个URL,但IIS看到另一个(这是如何强制.png文件,而不是通过PHP脚本)。