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 相关文章推荐
JavaScript 全面解析各种浏览器网页中的JS 执行顺序
Feb 17 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
Nov 19 Javascript
JS截取url中问号后面参数的值信息
Apr 29 Javascript
javascript搜索框点击文字消失失焦时文本出现
Sep 18 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
Dec 11 Javascript
jQuery实现元素拖拽并cookie保存顺序的方法
Feb 20 Javascript
javascript实现dom元素可拖动
Mar 21 Javascript
jQuery 获取跨域XML(RSS)数据的相关总结分析
May 18 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
Sep 05 Javascript
Vue组件通信实践记录(推荐)
Aug 15 Javascript
vue中vee validate表单校验的几种基本使用
Jun 25 Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
Aug 08 jQuery
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
thinkphp文件处理类Dir.class.php的用法分析
2014/12/08 PHP
利用javascript中的call实现继承
2007/01/22 Javascript
Jquery优化效率 提升性能解决方案
2010/09/06 Javascript
浅谈类似于(function(){}).call()的js语句
2015/03/30 Javascript
JS选项卡动态替换banner图片路径的方法
2015/05/11 Javascript
Angularjs中controller的三种写法分享
2016/09/21 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
2017/04/11 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
Vue循环遍历选项赋值到对应控件的实现方法
2020/06/22 Javascript
echarts实现获取datazoom的起始值(包括x轴和y轴)
2020/07/20 Javascript
Django集成百度富文本编辑器uEditor攻略
2014/07/04 Python
寻找网站后台地址的python脚本
2014/09/01 Python
Python函数嵌套实例
2014/09/23 Python
python批量下载抖音视频
2019/06/17 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
2019/08/05 Python
Pytorch中accuracy和loss的计算知识点总结
2019/09/10 Python
python 线性回归分析模型检验标准--拟合优度详解
2020/02/24 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
2020/04/02 Python
Python yield生成器和return对比代码实例
2020/04/20 Python
django 模型中的计算字段实例
2020/05/19 Python
python 实用工具状态机transitions
2020/11/21 Python
html5构建触屏网站之网站尺寸探讨
2013/01/07 HTML / CSS
html5教程画矩形代码分享
2013/12/04 HTML / CSS
美国最大的在线水培用品商店:GrowersHouse.com
2018/08/14 全球购物
英国领先的高级美容和在线皮肤诊所:Face the Future
2020/06/17 全球购物
main 主函数执行完毕后,是否可能会再执行一段代码,给出说明
2012/12/05 面试题
应届生的求职推荐信范文
2013/11/30 职场文书
网络编辑求职信
2014/04/30 职场文书
副总经理任命书
2014/06/05 职场文书
财务会计专业求职信
2014/06/09 职场文书
工程部岗位职责范本
2015/04/11 职场文书
婚庆主持词大全
2015/06/30 职场文书
2015年教师节感言
2015/08/03 职场文书
创业计划书之水果店
2019/07/18 职场文书
创业计划书之美甲店
2019/09/20 职场文书
python如何正确使用yield
2021/05/21 Python