lnx1824 发表于 2013-1-17 23:56:38

【转】Servlet实现文件下载的源码

一、如何使用

如果此Servlet命名为download,请求的URL为:/download?path=xxx,请求后出现下载窗口:
http://www.blogjava.net/images/blogjava_net/fastunit/download.gif
二、源码
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; width: 1086px; padding-top: 4px; background-color: #eeeeee; border: 1px solid #cccccc;">import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

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

public class FileDownload extends HttpServlet {

  protected void service(HttpServletRequest req, HttpServletResponse res)
      throws ServletException, IOException {

    // 服务器相对路径
    String path = req.getParameter("path");
    // 服务器绝对路径
    path = getServletContext().getRealPath("/") + path;

    // 检查文件是否存在
    File obj = new File(path);
    if (!obj.exists()) {
      res.setContentType("text/html;charset=GBK");
      res.getWriter().print("指定文件不存在!");
      return;
    }

    // 读取文件名:用于设置客户端保存时指定默认文件名
    int index = path.lastIndexOf("\\"); // 前提:传入的path字符串以“\”表示目录分隔符
    String fileName = path.substring(index + 1);

    // 写流文件到前端浏览器
    ServletOutputStream out = res.getOutputStream();
    res.setHeader("Content-disposition", "attachment;filename=" + fileName);
    BufferedInputStream bis = null;
    BufferedOutputStream bos = null;
    try {
      bis = new BufferedInputStream(new FileInputStream(path));
      bos = new BufferedOutputStream(out);
      byte[] buff = new byte[2048];
      int bytesRead;
      while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
        bos.write(buff, 0, bytesRead);
      }
    } catch (IOException e) {
      throw e;
    } finally {
      if (bis != null)
        bis.close();
      if (bos != null)
        bos.close();
    }
  }

}
页: [1]
查看完整版本: 【转】Servlet实现文件下载的源码