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 相关文章推荐
Input 特殊事件onpopertychange和oninput
Jun 17 Javascript
jquery创建表格(自动增加表格)代码分享
Dec 25 Javascript
JavaScript实现班级随机点名小应用需求的具体分析
May 12 Javascript
jquery delay()介绍及使用指南
Sep 02 Javascript
JavaScript sup方法入门实例(把字符串显示为上标)
Oct 20 Javascript
iframe与主框架跨域相互访问实现方法
Sep 14 Javascript
vue地区选择组件教程详解
May 04 Javascript
vue 自定义指令自动获取文本框焦点的方法
Aug 25 Javascript
vue router的基本使用和配置教程
Nov 05 Javascript
vue 强制组件重新渲染(重置)的两种方案
Oct 29 Javascript
5分钟快速看懂ES6中的反射与代理
Dec 19 Javascript
Webpack的Loader和Plugin的区别
Nov 09 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 date与gmdate的获取日期的区别
2010/02/08 PHP
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
谈谈 PHP7新增功能
2015/12/16 PHP
php基于SQLite实现的分页功能示例
2017/06/21 PHP
javascript form 验证函数 弹出对话框形式
2009/06/23 Javascript
jQuery EasyUI NumberBox(数字框)的用法
2010/07/08 Javascript
基于jquery库的tab新形式使用
2012/11/16 Javascript
jQuery中toggleClass()方法用法实例
2015/01/05 Javascript
老生常谈js动态添加事件--- 事件委托
2016/07/19 Javascript
bootstrap滚动监控器使用方法解析
2017/01/13 Javascript
DVA框架统一处理所有页面的loading状态
2017/08/25 Javascript
zTree 树插件实现全国五级地区点击后加载的示例
2018/02/05 Javascript
详解vue-cli 快速搭建单页应用之遇到的问题及解决办法
2018/03/01 Javascript
JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例
2018/12/14 Javascript
基于Vue的侧边目录组件的实现
2020/02/05 Javascript
将Vue组件库更换为按需加载的方法步骤
2020/05/06 Javascript
vue 子组件修改data或调用操作
2020/08/07 Javascript
vue 修改 data 数据问题并实时显示操作
2020/09/07 Javascript
JavaScript实现世界各地时间显示
2020/09/07 Javascript
vue项目实现减少app.js和vender.js的体积操作
2020/11/12 Javascript
Python新手在作用域方面经常容易碰到的问题
2015/04/03 Python
python编码最佳实践之总结
2016/02/14 Python
Python 获得13位unix时间戳的方法
2017/10/20 Python
Django使用详解:ORM 的反向查找(related_name)
2018/05/30 Python
Python字符串、整数、和浮点型数相互转换实例
2018/08/04 Python
PyCharm代码回滚,恢复历史版本的解决方法
2018/10/22 Python
带你认识Django
2019/01/15 Python
Python函数中不定长参数的写法
2019/02/13 Python
利用Tensorflow的队列多线程读取数据方式
2020/02/05 Python
html5 自定义播放器核心代码
2013/12/20 HTML / CSS
师范学院毕业生求职信范文
2013/12/26 职场文书
汽车销售员如何做职业生涯规划
2014/02/16 职场文书
工会工作先进事迹
2014/08/18 职场文书
2020年基层司法所建设情况调研报告
2019/11/30 职场文书
python开发飞机大战游戏
2021/07/15 Python
Python使用Web框架Flask开发项目
2022/06/01 Python