【本文简介】
一个servlet 文件下载 的简单例子。
【文件夹结构】
【java代码】
1 package com.zjm.www.servlet; 2 3 import java.io.BufferedInputStream; 4 import java.io.BufferedOutputStream; 5 import java.io.File; 6 import java.io.FileInputStream; 7 import java.io.IOException; 8 import java.io.InputStream; 9 import java.io.OutputStream; 10 11 import javax.servlet.ServletException; 12 import javax.servlet.http.HttpServlet; 13 import javax.servlet.http.HttpServletRequest; 14 import javax.servlet.http.HttpServletResponse; 15 16 /** 17 * @描述 servlet 文件下载 18 * @作者 小M 19 * @博客 http://www.cnblogs.com/xiaoMzjm/ 20 * @时间 2014/07/30 21 */ 22 public class DownLoadServlet extends HttpServlet { 23 24 25 private static final long serialVersionUID = 1L; 26 27 public void doGet(HttpServletRequest request, HttpServletResponse response) 28 throws ServletException, IOException { 29 doPost(request,response); 30 } 31 32 public void doPost(HttpServletRequest request, HttpServletResponse response) 33 throws ServletException, IOException { 34 35 // 转码,建议使用过滤器过滤。 36 request.setCharacterEncoding("UTF8"); 37 response.setCharacterEncoding("UTF8"); 38 39 // 获取上传文件的 文件名 40 String fileName = request.getParameter("fileName"); 41 42 // 文件所放的文件夹,服务器文件相对路径。有关路径问题,请参考另一篇博文:http://www.cnblogs.com/xiaoMzjm/p/3878758.html 43 String path = request.getServletContext().getRealPath("/")+"\DownLoadFile\"; 44 45 // 下载路径 = 文件所放的文件夹 + 文件名 46 String downLoadPath = path + fileName; 47 48 // 创建输入流 连接文件,并把文件 读 到流中 49 File file = new File(downLoadPath); 50 InputStream fis = new BufferedInputStream(new FileInputStream(file)); 51 52 // 判断文件有有多少字节可以读 53 byte[] buffer = new byte[fis.available()]; 54 fis.read(buffer); 55 fis.close(); 56 57 // 清空response 58 response.reset(); 59 60 /** 61 * 设置response的Header,必须设。 62 * 【几个头文件简介】: 63 * 1、Content-disposition是MIME协议的扩展,此协议可让浏览器弹出下载框。同时可以改变下载时文件的文件名。 64 * 2、Content-Length用于描述HTTP消息实体的传输长度。 65 * 在HTTP协议中,消息实体长度和消息实体的传输长度是有区别,比如说gzip压缩下,消息实体长度是压缩前的长度,消息实体的传输长度是gzip压缩后的长度。 66 */ 67 response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"),"ISO-8859-1")); 68 response.addHeader("Content-Length", "" + file.length()); 69 OutputStream out = new BufferedOutputStream(response.getOutputStream()); 70 71 /** 72 * 配置MIME类型,通知浏览器下载的文件的格式。 73 * 更多 MIME类型 和 后缀名 的映射可在百度文库搜索 : “MIME类型大全” 或者戳中连接: 74 * http://wenku.baidu.com/link?url=SIJffXFE68HnvhI39h0c0PtjSzz7v8SoYzo274HcEx8jYRm-V07_WkotLQdVnT_JGyNhIUY_bjQRgnfz_b53rg5EnHD_ist84Pq-uWMYjyG 75 */ 76 response.setContentType("application/octet-stream"); 77 78 // 输出 79 out.write(buffer); 80 out.flush(); 81 out.close(); 82 } 83 }