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 读取元素的CSS信息的代码
Feb 07 Javascript
js怎么终止程序return不行换jfslk
May 30 Javascript
浅析Node.js查找字符串功能
Sep 03 Javascript
在JavaScript中处理时间之setMinutes()方法的使用
Jun 11 Javascript
浅谈js中test()函数在正则中的使用
Aug 19 Javascript
Node.js的文件权限及读写flag详解
Oct 11 Javascript
js前端实现多图图片上传预览的两个方法(推荐)
Nov 18 Javascript
用js制作淘宝放大镜效果
Oct 28 Javascript
详解vuejs几种不同组件(页面)间传值的方式
Jun 01 Javascript
jQuery动态添加.active 实现导航效果代码思路详解
Aug 29 jQuery
vue-router项目实战总结篇
Feb 11 Javascript
JavaScript与JQuery框架基础入门教程
Jul 15 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 zlib扩展实现页面GZIP压缩输出
2010/06/17 PHP
php获取随机数组列表的方法
2014/11/13 PHP
Joomla开启SEF的方法
2016/05/04 PHP
jquery实现excel导出的方法
2013/04/04 Javascript
jQuery语法小结(超实用)
2015/12/31 Javascript
Javascript的表单验证长度
2016/03/16 Javascript
Bootstrap Table使用方法详解
2016/08/01 Javascript
Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案
2016/09/15 Javascript
vue之数据交互实例代码
2017/06/16 Javascript
label+input实现按钮开关切换效果的实例
2017/08/16 Javascript
详谈js中标准for循环与foreach(for in)的区别
2017/11/02 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
2018/07/22 Javascript
JavaScript引用类型Array实例分析
2018/07/24 Javascript
Vue中用props给data赋初始值遇到的问题解决
2018/11/27 Javascript
[01:04:14]OG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
2016/07/04 Python
PyQt5每天必学之创建窗口居中效果
2018/04/19 Python
Python爬虫常用库的安装及其环境配置
2018/09/19 Python
Python数据类型之Tuple元组实例详解
2019/05/08 Python
Python转换时间的图文方法
2019/07/01 Python
浅谈python多进程共享变量Value的使用tips
2019/07/16 Python
Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项
2019/10/11 Python
python matplotlib折线图样式实现过程
2019/11/04 Python
scrapy redis配置文件setting参数详解
2020/11/18 Python
python实现视频压缩功能
2020/12/18 Python
浅析Python模块之间的相互引用问题
2021/02/26 Python
HTML5本地存储之Database Storage应用介绍
2013/01/06 HTML / CSS
利用html5 canvas破解简单验证码及getImageData接口应用
2013/01/25 HTML / CSS
京东国际站:JOYBUY
2017/11/23 全球购物
What is EJB
2016/07/22 面试题
宣传保护环境的公益广告词
2014/03/13 职场文书
核心价值观演讲稿
2014/05/13 职场文书
奉献演讲稿范文
2014/05/21 职场文书
献爱心标语
2014/06/21 职场文书
慰问信范文
2015/02/14 职场文书
超越Nginx的Web服务器caddy优雅用法
2022/06/21 Servers