zoukankan      html  css  js  c++  java
  • jsp+servlet实现文件的上传和下载

    实现文件的上传和下载首先需要理解几个知识,这样才可以很好的完成文件的上传和下载;

      (1):上传文件是上传到服务器上,而保存到数据库是文件名
      (2):上传文件是以文件转换为二进制流的形式上传的
      (3): enctype="multipart/form-data"需要设置在form里面,否则无法提交文件                         (4):必须在servlet3.0里面加上这句话,@MultipartConfig  


     1:首先创建一个前台页面upload.jsp,源码如下所示:

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     7 <title>文件上传页面</title>
     8 </head>
     9 <body>
    10 <script type="text/javascript">
    11     alert("${info}");
    12 </script>
    13 
    14 <!-- 上传文件是上传到服务器上,而保存到数据库是文件名 -->
    15 <!-- 上传文件是以文件转换为二进制流的形式上传的 -->
    16 <!-- enctype="multipart/form-data"需要设置在form里面,否则无法提交文件 -->
    17 <form action="upload" method="post" enctype="multipart/form-data">
    18     <table>
    19         <tr>
    20             <td></td>
    21             <td><h1>文件上传</h1></td>
    22         </tr>
    23         <tr>
    24             <td>文件描述:</td>
    25             <td><input type="text" name="desc"/></td>
    26         </tr>
    27         <tr>
    28             <td>上传文件:</td>
    29             <td><input type="file" name="file"/></td>
    30         </tr>
    31         <tr>
    32             <td></td>
    33             <td><input type="submit" value="上传文件"/></td>
    34         </tr>
    35     </table>
    36 </form>
    37 </body>
    38 </html>

    2:在webcontent目录下面创建一个文件夹upload用于存放上传到服务器的文件;

    3:创建后台处理页面servlet,文件名如UploadServlet.java,源码如下所示;

     1 package com.bie;
     2 
     3 import java.io.IOException;
     4 import java.util.UUID;
     5 
     6 import javax.servlet.ServletException;
     7 import javax.servlet.annotation.MultipartConfig;
     8 import javax.servlet.annotation.WebServlet;
     9 import javax.servlet.http.HttpServlet;
    10 import javax.servlet.http.HttpServletRequest;
    11 import javax.servlet.http.HttpServletResponse;
    12 import javax.servlet.http.Part;
    13 
    14 /** 
    15 * @author BieHongLi 
    16 * @version 创建时间:2017年3月4日 下午5:29:03 
    17 * 注意:上传文件必须添加@MultipartConfig()可以设置上传文件的大小
    18 */
    19 @WebServlet("/upload")
    20 @MultipartConfig
    21 public class UploadServlet extends HttpServlet{
    22 
    23     
    24     private static final long serialVersionUID = 1L;
    25 
    26     @Override
    27     protected void doPost(HttpServletRequest request, HttpServletResponse response) 
    28             throws ServletException, IOException {
    29         try {
    30             //获取文件描述信息
    31             String desc=request.getParameter("desc");
    32             //获取上传的文件
    33             Part part=request.getPart("file");
    34             //获取请求的信息
    35             String name=part.getHeader("content-disposition");
    36             //System.out.println(name);//测试使用
    37             //System.out.println(desc);//
    38             
    39             //获取上传文件的目录
    40             String root=request.getServletContext().getRealPath("/upload");
    41             System.out.println("测试上传文件的路径:"+root);
    42             
    43             //获取文件的后缀
    44             String str=name.substring(name.lastIndexOf("."), name.length()-1);
    45             System.out.println("测试获取文件的后缀:"+str);
    46             
    47             //生成一个新的文件名,不重复,数据库存储的就是这个文件名,不重复的
    48             String filename=root+"\"+UUID.randomUUID().toString()+str;
    49             System.out.println("测试产生新的文件名:"+filename);
    50             
    51             //上传文件到指定目录,不想上传文件就不调用这个
    52             part.write(filename);
    53             
    54             request.setAttribute("info", "上传文件成功");
    55         } catch (Exception e) {
    56             e.printStackTrace();
    57             request.setAttribute("info", "上传文件失败");
    58         }
    59         
    60         request.getRequestDispatcher("/upload.jsp").forward(request, response);
    61     }
    62     
    63 }

    演示效果如下所示:注意上传文件所在的目录,如下图所示;


     1:下载是在上传的基础上增加了一些内容,源码如下所示:

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
     4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     5 <html>
     6 <head>
     7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     8 <title>文件上传页面</title>
     9 </head>
    10 <body>
    11 <script type="text/javascript">
    12     alert("${info}");
    13 </script>
    14 
    15 <!-- 上传文件是上传到服务器上,而保存到数据库是文件名 -->
    16 <!-- 上传文件是以文件转换为二进制流的形式上传的 -->
    17 <!-- enctype="multipart/form-data"需要设置在form里面,否则无法提交文件 -->
    18 <form action="upload" method="post" enctype="multipart/form-data">
    19     <table>
    20         <tr>
    21             <td></td>
    22             <td><h1>文件上传</h1></td>
    23         </tr>
    24         <tr>
    25             <td>文件描述:</td>
    26             <td><input type="text" name="desc"/></td>
    27         </tr>
    28         <tr>
    29             <td>上传文件:</td>
    30             <td><input type="file" name="file"/></td>
    31         </tr>
    32         <tr>
    33             <td></td>
    34             <td><input type="submit" value="上传文件"/></td>
    35         </tr>
    36     </table>
    37 </form>
    38 
    39 <div>
    40     <h2>下载文件</h2>
    41     <c:forEach items="${files }" var="name">
    42         <a href="upload/${name }">${name }</a><br/>
    43     </c:forEach>
    44 </div>
    45 </body>
    46 </html>
     1 package com.bie;
     2 
     3 import java.io.IOException;
     4 import java.util.ArrayList;
     5 import java.util.List;
     6 import java.util.UUID;
     7 
     8 import javax.servlet.ServletException;
     9 import javax.servlet.annotation.MultipartConfig;
    10 import javax.servlet.annotation.WebServlet;
    11 import javax.servlet.http.HttpServlet;
    12 import javax.servlet.http.HttpServletRequest;
    13 import javax.servlet.http.HttpServletResponse;
    14 import javax.servlet.http.HttpSession;
    15 import javax.servlet.http.Part;
    16 
    17 /** 
    18 * @author BieHongLi 
    19 * @version 创建时间:2017年3月4日 下午5:29:03 
    20 * 注意:上传文件必须添加@MultipartConfig()可以设置上传文件的大小
    21 */
    22 @WebServlet("/upload")
    23 @MultipartConfig
    24 public class UploadServlet extends HttpServlet{
    25 
    26     
    27     private static final long serialVersionUID = 1L;
    28 
    29     @Override
    30     protected void doPost(HttpServletRequest request, HttpServletResponse response) 
    31             throws ServletException, IOException {
    32         //模拟数据库存储文件名
    33         HttpSession session=request.getSession();
    34         List<String> list=(List<String>)session.getAttribute("files");
    35         if(list==null){
    36             //如果集合为空,就创建一个集合
    37             list=new ArrayList<String>();
    38         }    
    39         
    40         try {
    41             //获取文件描述信息
    42             String desc=request.getParameter("desc");
    43             //获取上传的文件
    44             Part part=request.getPart("file");
    45             //获取请求的信息
    46             String name=part.getHeader("content-disposition");
    47             //System.out.println(name);//测试使用
    48             //System.out.println(desc);//
    49             
    50             //获取上传文件的目录
    51             String root=request.getServletContext().getRealPath("/upload");
    52             System.out.println("测试上传文件的路径:"+root);
    53             
    54             //获取文件的后缀
    55             String str=name.substring(name.lastIndexOf("."), name.length()-1);
    56             System.out.println("测试获取文件的后缀:"+str);
    57             
    58             //生成一个新的文件名,不重复,数据库存储的就是这个文件名,不重复的
    59             String fname=UUID.randomUUID().toString()+str;
    60             //将文件名保存到集合中
    61             list.add(fname);
    62             //将保存在集合中的文件名保存到域中
    63             session.setAttribute("files", list);
    64             
    65             String filename=root+"\"+fname;
    66             System.out.println("测试产生新的文件名:"+filename);
    67             
    68             //上传文件到指定目录,不想上传文件就不调用这个
    69             part.write(filename);
    70             
    71             request.setAttribute("info", "上传文件成功");
    72         } catch (Exception e) {
    73             e.printStackTrace();
    74             request.setAttribute("info", "上传文件失败");
    75         }
    76         
    77         request.getRequestDispatcher("/upload.jsp").forward(request, response);
    78     }
    79     
    80 }

    革命尚未成功,别先生仍需努力啊!!!

  • 相关阅读:
    ngx_lua_waf
    一致性hash算法
    BloomFilter理解
    SkipList理解
    es中的一些知识点记录
    普通类、抽象类和接口区别:
    spring中的事件 applicationevent 讲的确实不错(转)
    CMS和G1的区别,以及Parallel
    SpringBoot优化内嵌的Tomcat ---设置MaxConnections
    tomcat启动nio,apr详解以及配置
  • 原文地址:https://www.cnblogs.com/biehongli/p/6502390.html
Copyright © 2011-2022 走看看