JavaWeb基础知识总结. (67)

在jsp页面中给出超链接,链接到DownloadServlet,并提供要下载的文件名称。然后DownloadServlet获取文件的真实路径,然后把文件写入到response.getOutputStream()流中。

download.jsp

<body>

This is my JSP page. <br>

<a href=http://www.likecs.com/"<c:url value=http://www.likecs.com/\'/DownloadServlet?path=a.avi\'/>">a.avi</a><br/>

<a href=http://www.likecs.com/"<c:url value=http://www.likecs.com/\'/DownloadServlet?path=a.jpg\'/>">a.jpg</a><br/>

<a href=http://www.likecs.com/"<c:url value=http://www.likecs.com/\'/DownloadServlet?path=a.txt\'/>">a.txt</a><br/>

</body>

 

DownloadServlet.java

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

String filename = request.getParameter("path");

String filepath = this.getServletContext().getRealPath("/WEB-INF/uploads/" + filename);

File file = new File(filepath);

if(!file.exists()) {

response.getWriter().print("您要下载的文件不存在!");

return;

}

IOUtils.copy(new FileInputStream(file), response.getOutputStream());

}

 

上面代码有如下问题:

l 可以下载a.avi,但在下载框中的文件名称是DownloadServlet;

l 不能下载a.jpg和a.txt,而是在页面中显示它们。

JavaWeb基础知识总结.

3 通过Servlet下载2

下面来处理上一例中的问题,让下载框中可以显示正确的文件名称,以及可以下载a.jpg和a.txt文件。

通过添加content-disposition头来处理上面问题。当设置了content-disposition头后,浏览器就会弹出下载框。

而且还可以通过content-disposition头来指定下载文件的名称!

String filename = request.getParameter("path");

String filepath = this.getServletContext().getRealPath("/WEB-INF/uploads/" + filename);

File file = new File(filepath);

if(!file.exists()) {

response.getWriter().print("您要下载的文件不存在!");

return;

}

response.addHeader("content-disposition", "attachment;filename=" + filename);

IOUtils.copy(new FileInputStream(file), response.getOutputStream());

 

JavaWeb基础知识总结.

JavaWeb基础知识总结.

JavaWeb基础知识总结.

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwzfdw.html