使用Servlet实现字节流下载
2016-10-18 15:44
281 查看
项目中需要一个下载功能,具体来说是将存储在数据库中的字节流下载下来;
一开始我的解决思路是:
1.从数据库取出字节流;
2.将字节流以文件形式保存在服务器;
3.浏览器访问服务器文件所在位置,下载文件。
但是这种思路被老大毙掉了,让我使用Servlet实现下载,于是在网上搜索了一下实现了该功能,整理结果如下:
一、创建一个Servlet,该类继承HttpServlet,重写service()方法。
service中主要的思想是将下载文件写到文件流中去,这个文件流就是HttpServletResponse对象的输出流,代码如下:
二、在项目的web.xml中配置创建的Servlet:
一开始我的解决思路是:
1.从数据库取出字节流;
2.将字节流以文件形式保存在服务器;
3.浏览器访问服务器文件所在位置,下载文件。
但是这种思路被老大毙掉了,让我使用Servlet实现下载,于是在网上搜索了一下实现了该功能,整理结果如下:
一、创建一个Servlet,该类继承HttpServlet,重写service()方法。
service中主要的思想是将下载文件写到文件流中去,这个文件流就是HttpServletResponse对象的输出流,代码如下:
<span style="font-size:18px;">public class DownloadScriptServlet extends HttpServlet { private Logger logger = LoggerFactory.getLogger(DownloadScriptServlet.class); protected ServletContext context; private static final long serialVersionUID = -5183867105614548918L; @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ProgramService programService = SpringApplicationContext.getBean(ProgramService.class); int scriptId = Integer.parseInt(request.getParameter("scriptId")) ; int scriptVersion = Integer.parseInt(request.getParameter("scriptVersion")); ScriptVersion sv = new ScriptVersion(); sv = programService.downloadScriptByScriptId(scriptId, scriptVersion); byte[] script = sv.getScript(); if(script == null || script.length == 0){ String string = URLEncoder.encode("该次版本无脚本更新!","UTF-8"); response.getWriter().print("<script>alert(decodeURIComponent('" + string + "'));location.href = 'http://localhost:8080/web/program/script.action?t=info&b=prepare&scriptId="+scriptId+"'</script>"); } else { String downFilename=sv.getScriptFile(); response.setContentType("text/plain"); response.setHeader("Location",downFilename); response.setHeader("Content-Disposition", "attachment; filename=" + downFilename); OutputStream outputStream = response.getOutputStream(); outputStream.write(script); outputStream.flush(); outputStream.close(); } } } </span>
二、在项目的web.xml中配置创建的Servlet:
<span style="font-size:18px;"><span style="font-size:18px;"><servlet> <servlet-name>downloadScriptServlet</servlet-name> <servlet-class>com.DownloadScriptServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>downloadScriptServlet</servlet-name> <url-pattern>/service/script/download</url-pattern> </servlet-mapping></span></span>三、在前端页面中调用这个Servlet:
<span style="font-size:18px;"><span style="font-size:18px;">function script_download(scriptId,scriptVersion){window.open("../service/script/download?scriptId=" + scriptId + "&scriptVersion=" + scriptVersion);}</span></span>
相关文章推荐
- 使用Servlet实现文件下载的时候,避免浏览器自动打开文件
- 使用Servlet实现浏览器从服务器下载文件
- 使用cropbox.js+jquery.js+servlet实现图片的上传下载
- 使用jsp/servlet实现文件上传与下载
- 使用Servlet实现文件下载的时候,避免浏览器自动打开文件
- 使用Servlet实现下载文件的功能
- 使用Servlet实现下载文件的功能
- 使用Servlet实现文件的上传与下载
- 一个使用Servlet文件实现文件下载的实例
- 使用Servlet实现图片下载
- javaweb-使用servlet实现文件下载
- 使用Servlet实现动态文件下载
- 使用Servlet实现下载文件的功能
- 使用普通的Servlet实现文件下载功能
- 使用jsp/servlet简单实现文件上传与下载
- Servlet学习(五)使用Servlet过滤器实现登录权限校验-附源码下载
- 使用Servlet实现下载文件的功能
- jsp使用servlet实现文件下载
- 使用JSP+Servlet实现文件上传下载
- Java使用servlet实现文件上传至数据库和从数据库下载文件