java、javascript实现附件下载示例

 更新时间:2014年08月14日 17:34:30   投稿:whsnow  
在web开发中,经常需要开发“下载”这一模块,下面使用java、javascript实现附件下载,需要的朋友可以参考下

在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");

相关文章

  • 使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条

    使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条

    这篇文章主要介绍了使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条效果,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-01-01
  • JS运动改变单物体透明度的方法分析

    JS运动改变单物体透明度的方法分析

    这篇文章主要介绍了JS运动改变单物体透明度的方法,结合实例形式分析了页面元素属性动态修改相关操作技巧,需要的朋友可以参考下
    2018-01-01
  • IE6-IE9使用JSON、table.innerHTML所引发的问题

    IE6-IE9使用JSON、table.innerHTML所引发的问题

    这篇文章主要介绍了IE6-IE9使用JSON、table.innerHTML所引发的问题 ,需要的朋友可以参考下
    2015-12-12
  • D3.js实现文本的换行详解

    D3.js实现文本的换行详解

    相信大家都知道在SVG中添加文本是使用text元素。但这个元素不能够自动换行,超出的部分就显示不出来了,怎么办呢?下面通过这篇文章来给大家详细介绍下实现的过程。
    2016-10-10
  • JavaScript:void(0)用法及一些常见问题解决办法

    JavaScript:void(0)用法及一些常见问题解决办法

    这篇文章主要介绍了javascript:void(0)在JavaScript中的用法,探讨了其防止链接默认行为的作用,提供了使用示例,并针对常见问题如与#的区别、事件绑定和键盘访问进行了讲解,需要的朋友可以参考下
    2024-12-12
  • 微信小程序实现获取手机号60s倒计时

    微信小程序实现获取手机号60s倒计时

    这篇文章主要为大家详细介绍了微信小程序实现获取手机号60s倒计时,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • JavaScript对象访问器的工作原理及使用方法

    JavaScript对象访问器的工作原理及使用方法

    今天来聊一下JavaScript中的对象访问器,JavaScript的主要功能之一是能够定义对象,这些对象可以封装属性和方法,本文将深入探讨 JavaScript 对象访问器是什么、它是如何工作的以及使用对象访问器的作用,需要的朋友可以参考下
    2024-06-06
  • js函数排序的实例代码

    js函数排序的实例代码

    这篇文章介绍了js函数排序的代码,有需要的朋友可以参考一下
    2013-07-07
  • IE6下javasc#ipt:void(0) 无效的解决方法

    IE6下javasc#ipt:void(0) 无效的解决方法

    本篇文章主要是对IE6下javasc#ipt:void(0) 无效的解决方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • JS利用 clip-path 实现动态区域裁剪功能

    JS利用 clip-path 实现动态区域裁剪功能

    这篇文章主要介绍了JS利用 clip-path 实现动态区域裁剪功能,文中主要通过使用 box-shadow 实现,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12

最新评论