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 相关文章推荐
Jquery AJAX 用于计算点击率(统计)
Jun 30 Javascript
使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体
Jan 15 Javascript
百度UEditor编辑器如何关闭抓取远程图片功能
Mar 03 Javascript
JS实现点击按钮后框架内载入不同网页的方法
May 05 Javascript
javascript中setTimeout使用指南
Jul 26 Javascript
基于Jquery代码实现手风琴菜单
Nov 19 Javascript
微信小程序项目实践之九宫格实现及item跳转功能
Jul 19 Javascript
详解vue中的computed的this指向问题
Dec 05 Javascript
Next.js实现react服务器端渲染的方法示例
Jan 06 Javascript
Js on及addEventListener原理用法区别解析
Jul 11 Javascript
vue相同路由跳转强制刷新该路由组件操作
Aug 05 Javascript
基于angular实现树形二级表格
Oct 16 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也可以?成Shell Script
2006/10/09 PHP
apache rewrite_module模块使用教程
2008/01/10 PHP
PHP MemCached高级缓存配置图文教程
2010/08/05 PHP
一个PHP并发访问实例代码
2012/09/06 PHP
PHP使用SOAP调用.net的WebService数据
2013/11/12 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
2014/06/25 PHP
php实现批量上传数据到数据库(.csv格式)的案例
2017/06/18 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
2019/10/23 PHP
解析javascript 浏览器关闭事件
2013/07/08 Javascript
jquery学习总结(超级详细)
2014/09/04 Javascript
TypeScript具有的几个不同特质
2015/04/07 Javascript
javascript+HTML5自定义元素播放焦点图动画
2016/02/21 Javascript
js canvas实现擦除动画
2016/07/16 Javascript
详解基于webpack和vue.js搭建开发环境
2017/04/05 Javascript
在vscode中统一vue编码风格的方法
2018/02/22 Javascript
vue脚手架及vue-router基本使用
2018/04/09 Javascript
如何从零开始利用js手写一个Promise库详解
2018/04/19 Javascript
Vue实现动态添加或者删除对象和对象数组的操作方法
2018/09/21 Javascript
微信小程序自定义导航栏
2018/12/31 Javascript
使用Python判断质数(素数)的简单方法讲解
2016/05/05 Python
python实现人脸识别经典算法(一) 特征脸法
2018/03/13 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
Python使用sklearn实现的各种回归算法示例
2019/07/04 Python
Python学习笔记之函数的定义和作用域实例详解
2019/08/13 Python
Django-xadmin+rule对象级权限的实现方式
2020/03/30 Python
python 下载文件的几种方法汇总
2021/01/06 Python
飞利信loadrunner和软件测试笔试题
2012/09/22 面试题
英文简历中的自荐信范文
2013/12/14 职场文书
上课看小说检讨书
2014/02/22 职场文书
企业领导班子四风对照检查材料
2014/09/27 职场文书
领导干部群众路线对照检查材料
2014/11/05 职场文书
2014年医院科室工作总结
2014/12/20 职场文书
汽车车尾标语大全
2015/08/11 职场文书
Jupyter Notebook 如何修改字体和大小以及更改字体样式
2021/06/03 Python
一次SQL查询优化原理分析(900W+数据从17s到300ms)
2022/06/10 SQL Server