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使用cookie实现DIV提示框只显示一次的方法
Nov 05 Javascript
jQuery使用zTree插件实现树形菜单和异步加载
Feb 25 Javascript
jQuery插件pagination实现无刷新分页
May 21 Javascript
jquery的父、子、兄弟节点查找,节点的子节点循环方法
Dec 07 Javascript
从零学习node.js之详解异步控制工具async(八)
Feb 27 Javascript
Node.js使用NodeMailer发送邮件实例代码
Mar 06 Javascript
vue中的watch监听数据变化及watch中各属性的详解
Sep 11 Javascript
Vue起步(无cli)的啊教程详解
Apr 11 Javascript
vue实现页面滚动到底部刷新
Aug 16 Javascript
node实现简单的增删改查接口实例代码
Aug 22 Javascript
使用Vue生成动态表单
Nov 26 Javascript
vue实现滚动鼠标滚轮切换页面
Dec 13 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模板技术原理【一】
2008/01/10 PHP
浅析PHP的静态成员函数效率更高的原因
2014/06/13 PHP
适合PHP初学者阅读的4本经典书籍
2016/09/23 PHP
php双层循环(九九乘法表)
2017/10/23 PHP
js字符编码函数区别分析
2008/06/05 Javascript
ext jquery 简单比较
2010/04/07 Javascript
解决jquery的.animate()函数在IE6下的问题
2010/12/03 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
2014/07/18 Javascript
js判断是否按下了Shift键的方法
2015/01/27 Javascript
js仿淘宝和百度文库的评分功能
2016/05/15 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
Vuex模块化实现待办事项的状态管理
2017/03/15 Javascript
Vue.js tab实现选项卡切换
2017/05/16 Javascript
VueJs使用Amaze ui调整列表和内容页面
2017/11/30 Javascript
js+css实现红包雨效果
2018/07/12 Javascript
AngularJS $http post 传递参数数据的方法
2018/10/09 Javascript
js实现鼠标拖拽缩放div实例代码
2019/03/25 Javascript
ckeditor一键排版功能实现方法分析
2020/02/06 Javascript
python下函数参数的传递(参数带星号的说明)
2010/09/19 Python
对Python的Django框架中的项目进行单元测试的方法
2016/04/11 Python
Python向MySQL批量插数据的实例讲解
2018/03/31 Python
使用Python处理Excel表格的简单方法
2018/06/07 Python
Python 编程速成(推荐)
2019/04/15 Python
Python Pandas中根据列的值选取多行数据
2019/07/08 Python
Django在pycharm下修改默认启动端口的方法
2019/07/26 Python
django认证系统实现自定义权限管理的方法
2019/08/28 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
鼠标滚轮事件和Mac触控板双指事件
2019/12/23 HTML / CSS
Skyscanner台湾:全球知名的旅行比价引擎
2018/07/01 全球购物
中学自我评价
2014/01/31 职场文书
领导干部作风建设工作总结
2014/10/23 职场文书
2014年办公室人员工作总结
2014/12/09 职场文书
大班上学期个人总结
2015/02/13 职场文书
2015年质检工作总结
2015/05/04 职场文书
运动会闭幕式通讯稿
2015/07/18 职场文书
Python一行代码实现自动发邮件功能
2021/05/30 Python