zoukankan      html  css  js  c++  java
  • 利用Content-disposition实现无刷新下载图片文件

    今天在使用 tinypng.com 这个在线压缩图片的网站时,对其处理完图片后,可以无刷新下载图片感到好奇,于是了解了一下相关实现。无刷新下载可以利用MIME type或者设置Content-disposition来实现。

    无刷新下载文件

    无刷新下载 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 实现如下:

    1. header('Content-Disposition: attachment; filename=girl.png');
    2. // 禁止浏览器缓存,否则IE下可能会失效
    3. header("Pragma: No-cache");
    4. header("Cache-Control: No-cache");
    5. header("Expires: 0");
    6.  
    7. // 简单的返回文件
    8. echo file_get_contents('http://localhost/girl.png');
    php

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

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

  • 相关阅读:
    linux centos 常用命令(需掌握)
    centos轻松搭建NFS
    Centos6.1在yum安装软件的时候,居然报错了,如何解决
    安装好Centos后,需要做的几件事情。
    使用scp命令传输文件
    批量删除文件或者批量修改文件
    Centos7搭建常用的LNMP架构
    python实现自动抠名字签名,比PS还快
    inotify软件实现实时同步,ssh-key 秘钥连接方式,saltstack实战批量管理Linux,expect批量分发秘钥
    Cisco 路由器配置OSPF 动态路由 (开放式最短路径优先)
  • 原文地址:https://www.cnblogs.com/DoNetCShap/p/8789551.html
Copyright © 2011-2022 走看看