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 相关文章推荐
地震发生中逃生十大法则
May 12 Javascript
return false;和e.preventDefault();的区别
Jul 11 Javascript
js鼠标滑轮滚动事件绑定的简单实例(兼容主流浏览器)
Jan 14 Javascript
JQuery实现动态表格点击按钮表格增加一行
Aug 24 Javascript
node.js中的path.join方法使用说明
Dec 08 Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
May 12 Javascript
基于Vue.js的表格分页组件
May 22 Javascript
jQuery实现倒计时重新发送短信验证码功能示例
Jan 12 Javascript
JS去除字符串中空格的方法
Feb 14 Javascript
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
Mar 13 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
Jul 06 Javascript
通过实例了解Javascript柯里化流程
Mar 03 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设计模式之单例、多例设计模式的应用分析
2013/06/30 PHP
ZF框架实现发送邮件的方法
2015/12/03 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
2015/12/22 PHP
简单谈谈PHP中的Reload操作
2016/12/12 PHP
再说AutoComplete自动补全之实现原理
2011/11/05 Javascript
判断iframe里的页面是否加载完成
2014/06/06 Javascript
一个实用的图片切换支持点击切换和自动轮播
2014/09/09 Javascript
PHP中CURL的几个经典应用实例
2015/01/23 Javascript
jQuery实现的动态伸缩导航菜单实例
2015/05/07 Javascript
基于JS实现的倒计时程序实例
2015/07/24 Javascript
nodejs入门教程二:创建一个简单应用示例
2017/04/24 NodeJs
nodejs前端自动化构建环境的搭建
2017/07/26 NodeJs
使用D3.js制作图表详解
2017/08/13 Javascript
详解react-router 4.0 下服务器如何配合BrowserRouter
2017/12/29 Javascript
微信小程序实现YDUI的ScrollTab组件
2018/02/02 Javascript
基于vue和react的spa进行按需加载的实现方法
2018/09/29 Javascript
vue实现分页栏效果
2019/06/28 Javascript
JS实现打字游戏
2019/12/17 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
2019/12/25 Javascript
JS替换字符串中指定位置的字符(多种方法)
2020/05/28 Javascript
vue中封装axios并实现api接口的统一管理
2020/12/25 Vue.js
JavaScript实现切换多张图片
2021/01/27 Javascript
Python中使用md5sum检查目录中相同文件代码分享
2015/02/02 Python
python计算文本文件行数的方法
2015/07/06 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
2018/06/20 Python
Python实现的简单排列组合算法示例
2018/07/04 Python
Opencv+Python 色彩通道拆分及合并的示例
2018/12/08 Python
Python 多线程不加锁分块读取文件的方法
2018/12/11 Python
深入了解Django View(视图系统)
2019/07/23 Python
Python生态圈图像格式转换问题(推荐)
2019/12/02 Python
HTML5无刷新改变当前url的代码
2017/03/15 HTML / CSS
实习生的自我鉴定范文欣赏
2013/11/20 职场文书
招聘与培训专员岗位职责
2014/01/30 职场文书
对祖国的寄语大全
2014/04/11 职场文书
2014大学生中国梦主题教育学习思想汇报
2014/09/10 职场文书
springboot项目以jar包运行的操作方法
2021/06/30 Java/Android