serverlet实现文件下载

public void doGet(HttpServletRequest req, HttpServletResponse res)
      throws ServletException, IOException {
    req.setCharacterEncoding("ISO8859-1");
    res.setContentType("text/html;charset=utf-8");
    // 服务器相对路径
  String path = req.getParameter("address");
   
  // 服务器绝对路径
  path = getServletContext().getRealPath("/") + path;
  // path=java.net.URLEncoder.encode(path,"utf-8");
  path = new String(path.getBytes("ISO8859-1"), "utf-8");
System.out.println(path);
  // 检查文件是否存在
  File obj = new File(path);
  System.out.println(obj.exists());
  if (!obj.exists()) {
  res.setContentType("text/html;charset=utf-8");
  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();
  }
  }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值