HttpServlet下载服务器资源的简单实现

客户端代码:

	<h1 style="color:red">文件资源下载</h1>
	<a href="/TomCat/downloadServlet?filename=a.flv">a.flv</a><br>
	<a href="/TomCat/downloadServlet?filename=a.jpg">a.jpg</a><br>
	<a href="/TomCat/downloadServlet?filename=a.mp3">a.mp3</a><br>
	<a href="/TomCat/downloadServlet?filename=a.mp4">a.mp4</a><br>
	<a href="/TomCat/downloadServlet?filename=a.txt">a.txt</a><br>
	<a href="/TomCat/downloadServlet?filename=a.zip">a.zip</a><br>

HttpServlet下载服务器资源的简单实现

服务器端:

        将资源通过字节读写方式发送给客户,唯一不同要设置两个地方:

  1. 资源的类型,MIME格式的后缀名:response.setContentType(this.getServletContext().getMimeType(String filename));,其中ServletContext.getMimeType(String filename)可以获得MIME后缀名。
  2. 告知浏览器该资源不是直接解析,而是通过附件形式打开(下载):response.setHeader("Content-Disposition","attachment;filename=String filename");未设置这一步的话,浏览器能够解析的资源会直接解析,不能解析的资源通知下载。

服务器端代码如下:

//获取要下载文件的文件名,filename为客户端传入的信息
String filename = request.getParameter("filename");
//获取文件相对路径
String path = "download" + filename;   
//获取要下载文件的绝对路径,servletContext.getRealPath(String url);url为该类的相对路径
ServletContext servletContext = this.getServletContext();
String realPath = servletContext.getRealPath(path);

//设置响应头,告知浏览器资源类型
response.setContentType(servletContext.getMime);
//通知浏览器该文件不能直接解析,而是通过附件形式打开(下载)。
response.setHeader("Content-Disposition","attachment;filename=" + filename);

//获得输入输出流
InputStream in = new FileInputStream(path);
ServletOutputStream out = response.getOutputStream();

//读取并输出文件
int len = 0;
byte[] bytes = new byte[1024];
while((len = in.read(bytes)) > 0){
out.write(bytes,0,len);
}

//释放资源
in.close();
out.close();