Servlet编写文件下载响应

下载方式:
1.超链接下载
<a href="/servlet_all/download/1.txt">下载 1.txt</a>
若浏览器能解析该资源的mime类型,则打开;若不能则直接下载;

2.编码下载 通过servlet完成
<a href="/servlet_all/download?name=1.txt">下载1.txt</a>
a.设置文件的mime类型
String mimeType=context.getMimeType(文件名)
response.setContentType(mimeType);
b.设置下载头信息 content-disposition
response.setHeader("content-disposition", "attachment;filename="+文件名称);
c.提供流

response.getOutputStream();

demo示例:
服务器上存放可下载的资源

编写servlet
package blog.csdn.net.web.download;


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;


import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * 文件下载
 */
public class DownloadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;


	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 获取get请求下载的文件名
		String filename = request.getParameter("name");
		// 防止get请求读取name名乱码
		filename = new String(filename.getBytes("iso-8859-1"), "utf-8");
		// 设置文件MIME类型
		response.setContentType(getServletContext().getMimeType(filename));
		// 设置content-disposition
		response.setHeader("content-disposition", "attachment;filename=" + filename);


		// 获取输出流,我的文件都放到WebRoot/download目录下
		InputStream is = this.getServletContext().getResourceAsStream("/download/" + filename);
		/*
		 * 相当于:
		 * ServletContext context=this.getServletContext(); 
		 * String fullFileName=context.getRealPath("/download/"+filename); //获取要下载的文件绝对路径
		 * InputStream is=new FileInputStream(fullFileName);
		 */


		BufferedInputStream bis = new BufferedInputStream(is);
		// 获取输出流
		BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
		// 对拷流
		int b = -1;
		while ((b = bis.read()) != -1) {
			bos.write(b);
		}
		bos.flush();
		bos.close();
		bis.close();


	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		doGet(request, response);
	}


}

web.xml文件

  <servlet>
    <description></description>
    <display-name>DownloadServlet</display-name>
    <servlet-name>DownloadServlet</servlet-name>
    <servlet-class>blog.csdn.net.web.download.DownloadServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>DownloadServlet</servlet-name>
    <url-pattern>/download</url-pattern>
  </servlet-mapping>
最后.配置下载连接



猜你喜欢

转载自blog.csdn.net/mChenys/article/details/80909921