文件下载jspServlet

原创 2013年12月02日 00:11:12

下载
承接以前的上傳
列出文件:

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  String real=getServletContext().getRealPath("/WEB-INF/Files");
  Map<String,String> map=new HashMap<String, String>();
  File file=new File(real);
  listfiles(file,map);
  request.setAttribute("map", map);
  request.getRequestDispatcher("/ListFiles.jsp").forward(request, response);
 }

 private void listfiles(File file, Map<String, String> map) {
  // TODO Auto-generated method stub
  if(file.isFile()){
   String uuidn=file.getName();
   String oldname=uuidn.substring(uuidn.indexOf("_")+1);
   map.put(uuidn, oldname);
  }
  else{
   File[] fis=file.listFiles();
   for(File f:fis){
    listfiles(f, map);
   }
  }
 }


 

jsp:

    <h1>本站资源</h1>
    <c:forEach items="${map}" var="me">
    <c:url value="/servlet/Download" var="url">
     <c:param name="filename" value="${me.key}"></c:param>
    </c:url>
    <a href="${url }"> ${me.value }<br /></a>
    </c:forEach>


 

处理下载:

 

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  String real=getServletContext().getRealPath("/WEB-INF/Files");
  Map<String,String> map=new HashMap<String, String>();
  File file=new File(real);
  listfiles(file,map);
  request.setAttribute("map", map);
  request.getRequestDispatcher("/ListFiles.jsp").forward(request, response);
 }

 private void listfiles(File file, Map<String, String> map) {
  // TODO Auto-generated method stub
  if(file.isFile()){
   String uuidn=file.getName();
   String oldname=uuidn.substring(uuidn.indexOf("_")+1);
   map.put(uuidn, oldname);
  }
  else{
   File[] fis=file.listFiles();
   for(File f:fis){
    listfiles(f, map);
   }
  }
 }


 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  response.setContentType("text/html;charset=UTF-8");
  OutputStream out = response.getOutputStream();
  
  String filename = request.getParameter("filename");// get请求方式
  filename = new String(filename.getBytes("ISO-8859-1"),"UTF-8");// 中文编码
  
  // 截取老文件名
  String oldFileName = filename.substring(filename.indexOf("_")+1);
  // 得到存储路径
  String storePath = getServletContext().getRealPath("/WEB-INF/files");
  // 得到文件的全部路径
  String filePath = makeStorePath(storePath, filename)+"\\"+filename;
  
  // 判断文件是否存在
  File file = new File(filePath);
  if(!file.exists()){
   out.write("对比起!你要下载的文件可能已经不存在了".getBytes("UTF-8"));
   return;
  }
  
  InputStream in = new FileInputStream(file);
  // 通知客户端以下载的方式打开
  response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(oldFileName, "UTF-8"));
  
  byte[] b = new byte[1024];
  int len = -1;
  while((len=in.read(b))!=-1){
   out.write(b, 0, len);
  }
  in.close();
  out.write("下载成功".getBytes("UTF-8"));
 }
 private String makeStorePath(String storePath, String fileName) {
  int hashCode = fileName.hashCode();
  int dir1 = hashCode & 0xf;// 0000~1111:整数0~15共16个
  int dir2 = (hashCode & 0xf0) >> 4;// 0000~1111:整数0~15共16个

  String path = storePath + "\\" + dir1 + "\\" + dir2; // WEB-INF/files/1/12
  File file = new File(path);
  if (!file.exists())
   file.mkdirs();

  return path;
 }


处理Get方式的异常:

filename = new String(filename.getBytes("ISO-8859-1"),"UTF-8");// 中文编码
处理Post方式的乱码:

 request.setCharacterEncoding("utf-8")

相关文章推荐

struts2学习笔记(六)文件上传与下载(上)jspServlet的文件上传与下载

相应的servlet package org.lei.servlet; import java.io.File; import java.io.FileOutputStream; im...

JavaWeb---DefaultServlet和JspServlet

在tomcat文件夹中,${CATALINA}\conf\web.xml文件就是javaee项目中的web.xml文件。该文件中包含一个优先级最低的默认的Servlet,即DefaultServlet...

JSPServlet精华笔记—新手必备

一、     JSP (Java Server Pages) JSP是指: ▶    在HTML中嵌入Java脚本代码 ▶    由应用服务器中的JSP引擎来编译和执行嵌入的Java脚本代码 ...
  • a125138
  • a125138
  • 2012年09月27日 19:29
  • 3459

[HeadFirst-JSPServlet学习笔记][第一章:前言与概述]

第一章 前言与概述 web服务器做什么?答:接收客户请求,然后向客户返回结果 web客户做什么?答:此处客户指浏览器,web客户允许用户请求服务器上的某个资源,并向用户展现请求的结果。 html 客户...

[HeadFirst-JSPServlet学习笔记][第二章:高层概述]

第二章:高层体系结构容器1 什么是容器?servelet没有main()方法。它们受控于另一个Java应用,这个Java应用称为容器(Container) Tomcat就是这样一个容器。Web服务...

JSPServlet会话跟踪机制

一、Servlet的会话管理机制 根据设计,HTTP是一种无状态的协议。它意味着Web应用并不了解有关同一用户以前请求的信息。维持会话状态信息的方法之一是使用Servlet或者JSP容器提供的会话...
  • hxw_506
  • hxw_506
  • 2011年11月07日 19:10
  • 166

JSPServlet面试题

1、jsp有哪些内置对象作用分别是什么 答:JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应):  request      用户端请求,此请求会包含来自GET/POST请求的参数...
  • hxw_506
  • hxw_506
  • 2011年11月07日 19:02
  • 251

JSPServlet编码问题总结

设置编码的方式分为: pageEncoding="UTF-8"、contentType="text/html;charset=UTF-8"、request.setCharacterEncoding(...

[HeadFirst-JSPServlet学习笔记][第三章:实战MVC]

第三章 实战MVCJ2EE如何集成一切 Java2企业版(Java 2 Enterprise Editon,J2EE)是一种超级规范。规定了servlets2.4,JSP2.0,EJB2.1(Ente...

JSPServlet转发与重定向的区别

尽管HttpServletResponse.sendRedirect 方法和RequestDispatcher.forward 方法都可以让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:文件下载jspServlet
举报原因:
原因补充:

(最多只允许输入30个字)