利用Content-disposition实现无刷新下载图片文件

[ 2020-12-08 16:21:40 | 作者: admin ]
字号: | |
无刷新下载 rar 之类的文件很好实现:
         通过 meta 标签: <meta http-equiv="refresh" content="url=http://down.load/file.rar">;
         通过 Javascript 重定向: window.location.assign("http://down.load/file.rar");
         通过 Javascript 构建隐藏的 iframe 并设置 src $(body).append('<iframe style="display:none;" src="http://down.load/file.rar"')。

以上的实现均可以在当前页面无刷新进行,效果如 sourceforge、github 上的源码下载。
无刷新下载图片

上述无刷新下载主要是因为 rar 这类文件,服务器上设定的 MIME type 会告知浏览器访问时采用下载的方式。但如果要实现无刷新下载图片,就不能简单的使用上述方法了,因为浏览器会依据图片的 MIME,选择显示照片而不是下载图片。

对 tinypng.com 下载图片的链接信息进行查看,发现了与普通图片地址的 Header 信息不同之处:Content-disposition。

Header中多了一个Content-dispositionHeader中多了一个Content-disposition
Content-disposition

Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件。当浏览器接收到头时,它会激活文件下载对话框,它的文件名框自动填充了头中指定的文件名。

使用方式如: Content-Disposition: attachment; filename="fname.ext",fname.txt 是定义保存的名称,可随意指定。通过设置 HTTP header 中的Content-disposition ,就可以为图片临时定义新的 MIME,实现访问时提示保存。简单的 PHP 实现如下:
         header('Content-Disposition: attachment; filename=girl.png');
        // 禁止浏览器缓存,否则IE下可能会失效
         header("Pragma: No-cache");
         header("Cache-Control: No-cache");
         header("Expires: 0");
         
        // 简单的返回文件
         echo file_get_contents('http://localhost/girl.png');


tinypng 的图片下载地址为 https://tinypng.com/web/output/m1rd5u43so88e1b5.png/girl.png,其中 output 是程序地址,m1rd5u43so88e1b5.png 是服务器上保存的文件,而 girl.png 则是用户保存时使用的文件名。

设置好 Content-disposition ,再利用前面提到的无刷新下载文件就可以实现图片的无刷新下载了,要实现 .txt,.css 文件下载也是如此。不过单纯通过 Javascript 无法定义 Content-disposition。

转载于:https://www.cnblogs.com/DoNetCShap/p/8789551.html
[最后修改由 admin, 于 2020-12-08 16:23:27]
评论Feed 评论Feed: http://blog.xg98.com/feed.asp?q=comment&id=2738

这篇日志没有评论。

此日志不可发表评论。