zoukankan      html  css  js  c++  java
  • JSP+Servlet实现上传下载

    0.项目结构

    1.在WebRoot下创建index.jsp页面

     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
     2 <%
     3 String path = request.getContextPath();
     4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
     5 %>
     6 
     7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     8 <html>
     9   <head>
    10     <base href="<%=basePath%>">
    11     
    12     <title>My JSP 'index.jsp' starting page</title>
    13     <meta http-equiv="pragma" content="no-cache">
    14     <meta http-equiv="cache-control" content="no-cache">
    15     <meta http-equiv="expires" content="0">    
    16     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    17     <meta http-equiv="description" content="This is my page">
    18     <!--
    19     <link rel="stylesheet" type="text/css" href="styles.css">
    20     -->
    21   </head>
    22   
    23   <body>
    24    <form action="UploadServlet" enctype="multipart/form-data" method="post">
    25      <p>姓名:<input type="text" name="user"/></p>
    26      <p>选择图片:<input type="file" name="nfile"/></p>
    27      <p><input type="submit" value="提交"/></p>
    28    </form>
    29   </body>
    30 </html>

    2.在src下的com.servlet包下创建UploadServlet.java文件

      1 package com.servlet;
      2 
      3 import java.io.File;
      4 import java.io.IOException;
      5 import java.io.PrintWriter;
      6 import java.util.Arrays;
      7 import java.util.List;
      8 
      9 import javax.servlet.ServletException;
     10 import javax.servlet.http.HttpServlet;
     11 import javax.servlet.http.HttpServletRequest;
     12 import javax.servlet.http.HttpServletResponse;
     13 
     14 import org.apache.commons.fileupload.FileItem;
     15 import org.apache.commons.fileupload.FileUploadBase;
     16 import org.apache.commons.fileupload.FileUploadException;
     17 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
     18 import org.apache.commons.fileupload.servlet.ServletFileUpload;
     19 
     20 public class UploadServlet extends HttpServlet {
     21     public void doGet(HttpServletRequest request, HttpServletResponse response)
     22             throws ServletException, IOException {
     23         this.doPost(request, response);
     24     }
     25 
     26     public void doPost(HttpServletRequest request, HttpServletResponse response)
     27             throws ServletException, IOException {
     28       //1.乱码处理
     29         request.setCharacterEncoding("UTF-8");
     30         response.setCharacterEncoding("UTF-8");
     31         response.setContentType("text/html;charset=UTF-8");
     32         //创建输出流对象(负责在前台页面(写入)打印内容的)
     33         PrintWriter out=response.getWriter();
     34         
     35       //2.得知请求中的数据是否包含二进制数据
     36         boolean isMultipart=ServletFileUpload.isMultipartContent(request);
     37         
     38       //3.如果包含
     39         if(isMultipart){
     40             //3.1 创建封装表单数据的对象
     41             DiskFileItemFactory factory=new DiskFileItemFactory();
     42             
     43             //3.2 设置文件缓冲区大小4KB
     44             factory.setSizeThreshold(4096);
     45             
     46             //3.3 创建上传表单数据的对象 
     47             ServletFileUpload upload=new ServletFileUpload(factory);
     48             
     49             //3.4 设置上传单个文件的最大限制
     50             upload.setSizeMax(1024*30);
     51             
     52             try {
     53                 //3.5 解析请求中上传的表单数据,并将解析的内容的放入list集合
     54                 List<FileItem> filelist=upload.parseRequest(request);
     55                 
     56                 //3.6 循环存放表单数据的集合把普通字段和二进制字段取出来
     57                 for (FileItem f : filelist) {
     58                     //3.6.1 如果是普通字段
     59                     if(f.isFormField()){
     60                         //(1)获取普通字段的name属性值:user
     61                         String normalFiled=f.getFieldName();
     62                         
     63                         //(2)判断如果name属性值是想要的就取对应值
     64                         if(normalFiled.equals("user")){
     65                             //输出name属性所对应的value值
     66                             out.print(f.getString("UTF-8")+"上传了文件!<br/>");
     67                         }
     68                         
     69                     }else{
     70                         //3.6.2 如果是二进制文件字段
     71                         //(1)获取上传的文件名
     72                         String uploadFileName=f.getName();
     73                         
     74                         //(2)通过Arrays的aslist方法创建固定的集合,规定的文件格式
     75                         List<String> fileType=Arrays.asList("gif","bmp","jpg","png");
     76                         
     77                         //(3)返回文件的后缀
     78                         String ext=uploadFileName.substring(uploadFileName.lastIndexOf(".")+1);
     79                         
     80                         //(4)判断文件类型是否允许在制定范围
     81                         if(fileType.contains(ext)){
     82                             //(4.1)判断如果文件名不为空,将数值取出
     83                             if(uploadFileName!=null && !uploadFileName.equals("")){
     84                                 //(4.1.1)获取上传的文件路径
     85                                 String uploadFilePath=
     86                                     request.getSession().getServletContext().getRealPath("upload/");
     87                                 
     88                                 //拼接路径:第一个参数是文件夹,第二个参数是文件名
     89                                 File saveFile=new File(uploadFilePath,f.getName());
     90                                 
     91                                 //(4.1.2)上传到服务器
     92                                 f.write(saveFile);
     93                                 
     94                                 out.print("上传成功后的文件名是:"+uploadFileName+",文件大小是:"+f.getSize()+"bytes!<br/>");
     95                                 out.print("上传的文件夹路径:"+uploadFilePath+"<br/>");
     96                                 out.print("上传的文件全路径:"+saveFile.getAbsolutePath()+"<br/>");
     97                                 
     98                             }else{
     99                                 out.print("二进制文件名为空!");
    100                             }
    101                         }else{
    102                             out.print("文件上传失败!,文件类型只能是gif.bmp,jpg,png");
    103                         }
    104                     }
    105                 }
    106                 
    107             } catch (FileUploadBase.SizeLimitExceededException e) {
    108                 out.print("文件上传失败,文件太大,单个文件的最大限制是:"+upload.getSizeMax()+"bytes!!") ; 
    109                 e.printStackTrace();
    110             } catch (FileUploadException e) {
    111                 // TODO Auto-generated catch block
    112                 e.printStackTrace();
    113             } catch (Exception e) {
    114                 // TODO Auto-generated catch block
    115                 e.printStackTrace();
    116             }
    117             
    118         }else{
    119            //4.不包含
    120             out.print("表单中不包含二进制数据!");
    121         }
    122         
    123     }
    124 
    125 }
  • 相关阅读:
    Linux 改变文件的所有者
    Opencv -lippicv
    数据结构--二叉搜索树
    Window下cmd查看目录结构
    windows cmake与nmake
    Ubuntu18.04安装caffe python3.6 opencv3.2 CPU
    apt-get install 下载速度慢问题的解决
    使用pip安装速度慢问题的解决
    神经网络可视化
    【VS】代码行无法折叠及ctrl+鼠标左键无法跳转到定义的问题
  • 原文地址:https://www.cnblogs.com/holly8/p/5652614.html
Copyright © 2011-2022 走看看