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常用函数 不错
Sep 08 Javascript
use jscript Create a SQL Server database
Jun 16 Javascript
JavaScript 浏览器验证代码(来自discuz)
Jul 17 Javascript
flexigrid 参数说明
Nov 23 Javascript
使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体
Jan 15 Javascript
javascript从右边截取指定字符串的三种实现方法
Nov 29 Javascript
js读取被点击次数的简单实例(从数据库中读取)
Mar 07 Javascript
Javascript设计模式之观察者模式的多个实现版本实例
Mar 03 Javascript
javascript十六进制数字和ASCII字符之间的转换方法
Dec 27 Javascript
js实现字符全排列算法的简单方法
May 01 Javascript
echarts饼图扇区添加点击事件的实例
Oct 16 Javascript
Vue.js实现开发购物车功能的方法详解
Feb 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的access操作类
2008/04/09 PHP
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
mysql 查询指定日期时间内sql语句实现原理与代码
2012/12/16 PHP
PHP Switch 语句之学习笔记
2013/09/21 PHP
php处理带有中文URL的方法
2016/07/11 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
2017/06/20 PHP
PHP工厂模式简单实现方法示例
2018/05/23 PHP
父元素与子iframe相互获取变量和元素对象的具体实现
2013/10/15 Javascript
javascript操作ul中li的方法
2015/05/14 Javascript
jQuery轻松实现表格的隔行变色和点击行变色的实例代码
2016/05/09 Javascript
浅谈Sublime Text 3运行JavaScript控制台
2016/06/06 Javascript
Javascript之Date对象详解
2016/06/07 Javascript
使用vue.js制作分页组件
2016/06/27 Javascript
JS根据生日月份和日期计算星座的简单实现方法
2016/11/24 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
2017/01/13 Javascript
BootStrap实现带关闭按钮功能
2017/02/15 Javascript
vue如何将v-for中的表格导出来
2018/05/07 Javascript
bootstrap table插件动态加载表头
2019/07/19 Javascript
JavaScript在web自动化测试中的作用示例详解
2019/08/25 Javascript
[48:47]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
对python数据切割归并算法的实例讲解
2018/12/12 Python
使用celery执行Django串行异步任务的方法步骤
2019/06/06 Python
python程序 线程队列queue使用方法解析
2019/09/23 Python
Python 执行矩阵与线性代数运算
2020/08/01 Python
Pandas替换及部分替换(replace)实现流程详解
2020/10/12 Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
2020/11/18 Python
美国修容界大佬创建的个人美妆品牌:Kevyn Aucoin Beauty
2018/12/12 全球购物
为什么group by 和order by会使查询变慢
2014/05/16 面试题
教师节商场活动方案
2014/02/13 职场文书
2014迎接教师节演讲稿
2014/09/10 职场文书
乡镇党建工作汇报材料
2014/10/27 职场文书
2014年为民办实事工作总结
2014/12/20 职场文书
社区三八妇女节活动总结
2015/02/06 职场文书
经典人生语录分享:不畏将来,不念过去,笑对当下
2019/12/12 职场文书
Java常用函数式接口总结
2021/06/29 Java/Android
如何使用python包中的sched事件调度器
2022/04/30 Python