您的位置:首页 > 其它

使用Servlet实现字节流下载

2016-10-18 15:44 281 查看
项目中需要一个下载功能,具体来说是将存储在数据库中的字节流下载下来;

一开始我的解决思路是:

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 下载