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 相关文章推荐
日期处理的js库(迷你版)--自建js库总结
Nov 21 Javascript
js正则表达exec与match的区别说明
Jan 29 Javascript
Javascript 多物体运动的实现
Dec 24 Javascript
全系IE支持Bootstrap的解决方法
Oct 19 Javascript
javascript正则表达式定义(语法)总结
Jan 08 Javascript
javascript中this指向详解
Apr 23 Javascript
jQuery 特性操作详解及实例代码
Sep 29 Javascript
微信小程序 连续旋转动画(this.animation.rotate)详解
Apr 07 Javascript
jQuery实现手机号正则验证输入及自动填充空格功能
Jan 02 jQuery
使用vue点击li,获取当前点击li父辈元素的属性值方法
Sep 12 Javascript
layui table表格数据的新增,修改,删除,查询,双击获取行数据方式
Nov 14 Javascript
微信小程序转化为uni-app项目的方法示例
May 22 Javascript
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 批量更新网页内容实现代码
2010/01/05 PHP
php中的常用魔术方法总结
2013/08/02 PHP
php+mysqli事务控制实现银行转账实例
2015/01/29 PHP
PHP框架性能测试报告
2016/05/08 PHP
ZendFramework2连接数据库操作实例
2017/04/18 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
2018/12/20 PHP
php数值计算num类简单操作示例
2020/05/15 PHP
jquery 仿QQ校友的DIV模拟窗口效果源码
2010/03/24 Javascript
JavaScript arguments 多参传值函数
2010/10/24 Javascript
在次封装easyui-Dialog插件实现代码
2010/11/14 Javascript
如何使用Javascript获取距今n天前的日期
2013/07/08 Javascript
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
2013/10/11 Javascript
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
Select下拉框模糊查询功能实现代码
2016/07/22 Javascript
学习掌握JavaScript中this的使用技巧
2016/08/29 Javascript
jQuery Masonry瀑布流插件使用方法详解
2017/01/18 Javascript
js实现下一页页码效果
2017/03/07 Javascript
node.js学习笔记之koa框架和简单爬虫练习
2018/12/13 Javascript
JS桶排序的简单理解与实现方法示例
2019/11/25 Javascript
vue实现数字动态翻牌的效果(开箱即用)
2019/12/08 Javascript
vue和H5 draggable实现拖拽并替换效果
2020/07/29 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
vue-router定义元信息meta操作
2020/12/07 Vue.js
python使用循环实现批量创建文件夹示例
2014/03/25 Python
Python自定义进程池实例分析【生产者、消费者模型问题】
2016/09/19 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
2019/01/15 Python
Python实现七个基本算法的实例代码
2020/10/08 Python
怎样填写就业意向
2014/04/02 职场文书
2014年助理工程师工作总结
2014/11/14 职场文书
求职自我推荐信
2015/03/24 职场文书
电力安全学习心得体会
2016/01/18 职场文书
2019学校运动会开幕词
2019/05/13 职场文书
CSS3 实现NES游戏机的示例代码
2021/04/21 HTML / CSS
Win11查看设备管理器
2022/04/19 数码科技
MYSQL事务的隔离级别与MVCC
2022/05/25 MySQL