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 this关键字使用分析
Oct 21 Javascript
JavaScript 字符串连接性能优化
Dec 20 Javascript
javascript客户端解决方案 缓存提供程序
Jul 14 Javascript
js写的评论分页(还不错)
Dec 23 Javascript
JavaScript实现给按钮加上双重动作的方法
Aug 14 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
Sep 05 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
Dec 28 Javascript
JavaScript利用闭包实现模块化
Jan 13 Javascript
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
Aug 23 jQuery
vue input输入框模糊查询的示例代码
May 22 Javascript
微信小程序如何利用getCurrentPages进行页面传值
Jul 01 Javascript
在Chrome DevTools中调试JavaScript的实现
Apr 07 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 stripos()函数及注意事项的分析
2013/06/08 PHP
php获取汉字首字母的函数
2013/11/07 PHP
PHP调用MySQL存储过程并返回值的方法
2014/12/26 PHP
迁移PHP版本到PHP7
2015/02/06 PHP
浅谈Laravel中的一个后期静态绑定
2017/08/11 PHP
PHP实现UTF8二进制及明文字符串的转化功能示例
2017/11/20 PHP
javascript 检测浏览器类型和版本的代码
2009/09/15 Javascript
了不起的node.js读书笔记之node的学习总结
2014/12/22 Javascript
JS中创建函数的三种方式及区别
2016/03/13 Javascript
jQuery实现鼠标选文字发新浪微博的方法
2016/04/02 Javascript
JS实现左右无缝轮播图代码
2016/05/01 Javascript
ReactJs设置css样式的方法
2017/06/08 Javascript
JS设计模式之单例模式(一)
2017/09/29 Javascript
Vue利用History记录上一页面的数据方法实例
2018/11/02 Javascript
python 获取文件列表(或是目录例表)
2009/03/25 Python
python字符串编码识别模块chardet简单应用
2015/06/15 Python
详解Python的Flask框架中的signals信号机制
2016/06/13 Python
Python实现查找匹配项作处理后再替换回去的方法
2017/06/10 Python
Pandas中把dataframe转成array的方法
2018/04/13 Python
Flask web开发处理POST请求实现(登录案例)
2018/07/26 Python
解决django后台样式丢失,css资源加载失败的问题
2019/06/11 Python
python实战串口助手_解决8串口多个发送的问题
2019/06/12 Python
Python绘图Matplotlib之坐标轴及刻度总结
2019/06/28 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
2021/01/06 Python
澳大利亚连衣裙和女装在线:Esther
2017/11/11 全球购物
广告业务员岗位职责
2014/02/06 职场文书
网络工程师职业规划
2014/02/10 职场文书
大学生军训自我鉴定
2014/02/12 职场文书
加入学生会演讲稿
2014/04/24 职场文书
社团活动总结报告
2014/06/27 职场文书
民主评议党员总结
2014/10/20 职场文书
离婚案件被告代理词
2015/05/23 职场文书
圣贤教育改变命运观后感
2015/06/16 职场文书
pyqt5蒙版遮罩mask,setmask的使用
2021/06/11 Python
nginx结合openssl实现https的方法
2021/07/25 Servers