利用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-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。
利用Content-disposition实现无刷新下载图片文件的更多相关文章
- 实现ASP.NET无刷新下载并提示下载完成
先上代码,后面再进行说明. 以下是前端代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehi ...
- nodejs利用ajax实现网页无刷新上传图片
nodejs利用ajax实现网页无刷新上传图片 标签(空格分隔): nodejs 通常情况下上传图片是要通过提交form表单来实现的,但是这又不可避免的产生了网页转. 利用ajax技术和FormDat ...
- jquery ajax php 无刷新上传文件 带 遮罩 进度条 效果的哟
在很多项目中都会叫用户上传东西这些的,自从接触了jquery 和ajax之后就不管做什么,首先都会想到这个,我这个人呢?是比较重视客户体验的,这次我这边负责的是后台板块,然后就有一块是要求用户上传照片 ...
- 利用php CI force_download($filename, $data) 下载.csv 文件解决文件名乱码,文件内容乱码
利用php CI force_download($filename, $data) 下载.csv 文件解决文件名乱码,文件内容乱码 2014-07-31 12:53 1047人阅读 评论(0) 收藏 ...
- python+ajaxFileUpload 无刷新上传文件
需要准备文件 http://pan.baidu.com/s/1bp4N3nL qqi0 html <script src="{% static 'js/jquery.js' %}& ...
- jQuery+php+ajax实现无刷新上传文件功能
jQuery+php+ajax实现无刷新上传文件功能,还带有上传进度条动画效果,支持图片.视频等大文件上传. js代码 <script type='text/javascript' src='j ...
- Ajax 无刷新上传文件插件 uploadify 的使用
在表单中无法直接使用 Ajax 上传文件,解决的思路可以是使用插件无刷新地上传文件,返回文件上传后的地址,然后把该地址作为 Ajax 的参数传递给服务器端进行数据库处理.可以使用 uploadify ...
- ajax +jsp+iframe无刷新上传文件[转]
http://hi.baidu.com/zj360202/blog/item/f23e3711f929c774cb80c475.html ajax jsp 无刷新上传文件 2009-10-26 16: ...
- web 开发之js---巧用iframe实现jsp无刷新上传文件
首先要说的就是 ajax 是无法实现上传文件的,可以想一下ajax与后台通信都是通过传递字符串,怎么能传递文件呢?其实出于安全考虑js是不能操作文件的,所以就不要再说用ajax来实现文件的上传了,这是 ...
随机推荐
- 如何判断一个字符串是否是UTF8编码
UTF8是以8bits即1Bytes为编码的最基本单位,当然也可以有基于16bits和32bits的形式,分别称为UTF16和UTF32,但目前用得不多,而UTF8则被广泛应用在文件储存和网络传输中. ...
- js实现无刷新上传
在新增数据项的时候,用ajax实现无刷新提交,但上传文件的时候,由于数据类型原因,不能将页面的<asp:FileUpload>中以字符串值的方式传到js里调用.我一共找到了两个方法予以解决 ...
- R: 给 dataframe 的某列赋值、分组、因子化
################################################### 问题:给某一列赋值.分组.分类.因子化 18.4.24 如何把 data.frame 中的某 ...
- 100085G GCD Guessing Game
传送门 题目大意 给定一个数N,现在又一个数x,在1~N之间,现在每次可以猜一个数a,返回gcd(x,a),问说最少猜几次可以确定x. 分析 这个题应该可以算是贪心,但是没人知道这样为啥是对的(雾), ...
- C#多线程的简单例子
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- html+css自定义导航
利用css来编写的导航条,先看看效果: 代码区: html: <!--导航部分--> {block name="nav"} <nav> <div cl ...
- Java代码执行机制
一.java源码编译机制 一个java文件编译为.class文件的流程图. Parse an Enter阶段: Parse:将代码字符串转换为token序列(com.sun.tools.javac.p ...
- java 英文笔记
JDBC涉及到的单词 Driver 驱动器 DriverManager (Manager 处理者,经理,管理人; 干事,理事; 〈美〉(政党等的)领袖; 策士,干才,干练的人;) create Sta ...
- 点石成金:访客至上的网页设计秘笈(原书第2版) 中文PDF版
可用性设计是Web设计中最重要也是难度最大的一项任务.本书作者根据多年从业的经验,剖析用户的心理,在用户使用的模式.为扫描进行设计.导航设计.主页布局.可用性测试等方面提出了许多独特的观点,并给出了大 ...
- vs code进行c/c++开发
vs code是微软公司开发的跨平台编辑器,丰富的插件功能可以满足各种编程语言的编码,编译和调试.由于vs code本身只是一个编辑器,所以你需要准备编译工具链.本文针对的是windows系统,我这里 ...