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 相关文章推荐
事件模型在各浏览器中存在差异
Oct 20 Javascript
JavaScript中使用Substring删除字符串最后一个字符
Nov 03 Javascript
用js控制组织结构图可以任意拖拽到指定位置
Jan 17 Javascript
js分页工具实例
Jan 28 Javascript
详解js中call与apply关键字的作用
Nov 21 Javascript
Vue 源码分析之 Observer实现过程
Mar 29 Javascript
Vue波纹按钮组件制作
Apr 30 Javascript
JS实现可视化文件上传
Sep 08 Javascript
微信小程序实现卡片层叠滑动效果
Jun 21 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
Sep 02 Javascript
layui table 获取分页 limit的方法
Sep 20 Javascript
node.js 微信开发之定时获取access_token
Feb 07 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/04/28 PHP
php结合ajax实现赞、顶、踩功能实例
2014/05/12 PHP
php自定义urlencode,urldecode函数实例
2015/03/24 PHP
PHP用反撇号执行外部命令
2015/04/14 PHP
Yii2下点击验证码的切换实例代码
2017/03/14 PHP
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
实例介绍PHP中zip_open()函数用法
2019/02/15 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
2020/04/14 PHP
js常见表单应用技巧
2008/01/09 Javascript
你必须知道的Javascript知识点之&quot;单线程事件驱动&quot;的使用
2013/04/23 Javascript
详解js跨域原理以及2种解决方案
2015/12/09 Javascript
JavaScript关于提高网站性能的几点建议(一)
2016/07/24 Javascript
浅谈JavaScript 函数参数传递到底是值传递还是引用传递
2016/08/23 Javascript
详解Vue.js基于$.ajax获取数据并与组件的data绑定
2017/05/26 Javascript
ndm:NPM的桌面GUI应用程序
2018/10/15 Javascript
小程序卡片切换效果组件wxCardSwiper的实现
2020/02/13 Javascript
Vue看了就会的8个小技巧
2021/01/21 Vue.js
[07:52]2014DOTA2 TI逗比武士游V社解说背后的故事
2014/07/10 DOTA
Python 使用SMTP发送邮件的代码小结
2016/09/21 Python
python实现的按要求生成手机号功能示例
2019/10/08 Python
python框架flask表单实现详解
2019/11/04 Python
SpringBoot首页设置解析(推荐)
2021/02/11 Python
美国乡村商店:Plow & Hearth
2016/09/12 全球购物
英国男士时尚购物网站:Stuarts London
2017/10/22 全球购物
Notino瑞典:购买香水和美容产品
2019/07/26 全球购物
美国在线面料商店:Fashion Fabrics Club
2020/01/31 全球购物
What's the difference between Debug and Trace class? (Debug类与Trace类有什么区别)
2013/09/10 面试题
学校消防演习方案
2014/02/19 职场文书
绍兴鲁迅故居导游词
2015/02/09 职场文书
大学生自荐书范文
2015/03/05 职场文书
大学生见习总结报告
2015/06/24 职场文书
幼儿园元旦主持词
2015/07/06 职场文书
员工旷工检讨书
2015/08/15 职场文书
2019年大学推荐信
2019/06/24 职场文书
Django显示可视化图表的实践
2021/05/10 Python
「睡美人」爱洛公主粘土人开订
2022/03/22 日漫