使用Servlet实现字节流下载

来源:互联网 发布:网络验证破解 跳 编辑:程序博客网 时间:2024/06/04 17:44

项目中需要一个下载功能,具体来说是将存储在数据库中的字节流下载下来;

一开始我的解决思路是:

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;@Overrideprotected 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>





1 0
原创粉丝点击