java、javascript实现附件下载示例


Posted in Javascript onAugust 14, 2014

在web开发中,经常需要开发“下载”这一模块,以下给出一个简单的例子。

在服务器端,使用java开发:

@RequestMapping(value = "download.html", method = RequestMethod.GET) 
public void download(String resourceid, HttpServletRequest request, HttpServletResponse response) { 
response.setContentType("charset=UTF-8"); 
File file = new File(path); 
response.setHeader("Content-Disposition", "attachment; filename=a"); 
BufferedInputStream bis = null; 
BufferedOutputStream bos = null; 
OutputStream fos = null; 
InputStream fis = null; 
try { 
fis = new FileInputStream(file.getAbsolutePath()); 
bis = new BufferedInputStream(fis); 
fos = response.getOutputStream(); 
bos = new BufferedOutputStream(fos); 
int bytesRead = 0; 
byte[] buffer = new byte[5 * 1024]; 
while ((bytesRead = bis.read(buffer)) != -1) { 
bos.write(buffer, 0, bytesRead); 
} 
bos.flush(); 
}catch(E e){ 
}finally { 
try { 
bis.close(); 
bos.close(); 
fos.close(); 
fis.close(); 
} catch (IOException e) { 
e.printStackTrace(); 
} 
} 
}

当我们在前端请求这个地址时,服务器先找出文件,设置响应头,然后通过流输出到浏览器端。

浏览器在头中发现该响应的主体是流文件,则自动会调用另存为的窗口,让用户保存下载。

这里有个关键就是Content-Disposition这个头属性,Content-Disposition是MIME协议的扩展,用于指示如何让客户端显示附件的文件。

它可以设置为两个值:

inline //在线打开

attachment //作为附件下载

这里我们设置的值为attachment,所以可以被识别为附件并下载。

上面讲了如何写服务器端,下面讲前端如何请求。

前端请求有三种方式:

1.Form

<form action='download.html' method='post'> 
<input type='submit'/> 
</form>

2.iframe

var iframe = "<iframe style='display:none' src='download.html'></iframe>" 
body.append(iframe);

​当iframe被append到body中时,会自动请求下载链接。

3.open

window.open("download.html");
Javascript 相关文章推荐
jQuery 使用手册(六)
Sep 23 Javascript
JavaScript的各种常见函数定义方法
Sep 16 Javascript
node.js中的buffer.slice方法使用说明
Dec 10 Javascript
jQuery中is()方法用法实例
Jan 06 Javascript
分享我的jquery实现下拉菜单心的
Nov 29 Javascript
js数字计算 误差问题的快速解决方法
Feb 28 Javascript
基于JavaScript实现的顺序查找算法示例
Apr 14 Javascript
微信小程序实现下拉刷新和轮播图效果
Nov 21 Javascript
用Object.prototype.toString.call(obj)检测对象类型原因分析
Oct 11 Javascript
vue-cli3使用 DllPlugin 实现预编译提升构建速度
Apr 24 Javascript
js实现随机点名器精简版
Jun 29 Javascript
Vue.Draggable实现交换位置
Apr 07 Vue.js
js怎么判断flash swf文件是否加载完毕
Aug 14 #Javascript
Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
Aug 14 #Javascript
JQuery Tips相关(1)----关于$.Ready()
Aug 14 #Javascript
javascript实现获取cookie过期时间的变通方法
Aug 14 #Javascript
javascript检查浏览器是否支持flash的实现代码
Aug 14 #Javascript
用Jquery选择器计算table中的某一列某一行的合计
Aug 13 #Javascript
html文档中的location对象属性理解及常见的用法
Aug 13 #Javascript
You might like
浅谈PHP中Stream(流)
2015/06/08 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
2016/01/07 PHP
thinkphp查询,3.X 5.0方法(亲试可行)
2017/06/17 PHP
分享20多个很棒的jQuery 文件上传插件或教程
2011/09/04 Javascript
jQuery UI Autocomplete 体验分享
2012/02/14 Javascript
window.opener用法和用途实例介绍
2013/08/19 Javascript
jQuery javaScript捕获回车事件(示例代码)
2013/11/07 Javascript
jquery ajax 局部刷新小案例
2014/02/08 Javascript
jQuery操作表单常用控件方法小结
2015/03/23 Javascript
javascript中return,return true,return false三者的用法及区别
2015/11/17 Javascript
JS仿百度自动下拉框模糊匹配提示
2016/07/25 Javascript
JS实现二维数组横纵列转置的方法
2018/04/17 Javascript
Vue刷新修改页面中数据的方法
2018/09/16 Javascript
详解Angular Karma测试的持续集成实践
2019/11/15 Javascript
Javascript地址引用代码实例解析
2020/02/25 Javascript
tracking.js实现前端人脸识别功能
2020/04/16 Javascript
在Python中marshal对象序列化的相关知识
2015/07/01 Python
Python优化技巧之利用ctypes提高执行速度
2016/09/11 Python
利用Python读取文件的四种不同方法比对
2017/05/18 Python
详解Python中的分组函数groupby和itertools)
2018/07/11 Python
用Python实现数据的透视表的方法
2018/11/16 Python
python实现Virginia无密钥解密
2019/03/20 Python
Python数据存储之 h5py详解
2019/12/26 Python
CSS3 icon font完全指南(CSS3 font 会取代icon图标)
2013/01/06 HTML / CSS
四好少年事迹材料
2014/01/12 职场文书
小学音乐教学反思
2014/02/05 职场文书
安全大检查实施方案
2014/02/22 职场文书
公司聘任书模板
2014/03/29 职场文书
阳光体育活动总结
2014/04/30 职场文书
公司优秀员工获奖感言
2014/08/14 职场文书
群众路线个人对照检查材料2014
2014/09/26 职场文书
大学生求职意向书
2015/05/11 职场文书
一个独生女的故事观后感
2015/06/04 职场文书
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL
SQL 聚合、分组和排序
2021/11/11 MySQL
解决ubuntu安装软件时,status-code=409报错的问题
2022/12/24 Servers