zoukankan      html  css  js  c++  java
  • 2.1 学习总结 之文件上传

     一、文件上传知识简介

    1、文件上传和下载的实质:文件的拷贝

    2、文件上传:从本地拷贝到服务器磁盘上   客户端需要编写文件上传表单---->服务端需要编写代码接受上传的 文件

    3、文件下载:从服务器磁盘上拷贝到本地磁盘   需要编写服务端的代码,客户端的下载的工作浏览器内核解决的

    4、文件上传的步骤:

    1) 、需要写一个文件上传表单

    2)、 编写服务器端的代码用于接收上传的文件

    5、注意事项:

    做文件上传时客户端需要满足的三个条件

    1)、提交方式必须是post方式提交 即:method="post"。

    2)、文件类型的input标签必须要有name属性

    3)、form表单必须是一个多部分表单即:enctype="multipart/form-data"

    6、使用方便快捷的文件上传的工具---Apache Commons-fileupload.jar

    7、FileUpload工具中三个核心的对象

    1)、DiskFileItemFactory:磁盘文件项工厂--一些相关的配置的设置  缓存的大小 临时目录的位置

    2)、ServletFileUplaod:文件上传的一个核心类

    3)、FileItem:代表每一个表单项

    二、文件上传的原理分析

     三、文件上传的API的详解

     

     四、代码

    1、简单界面

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <form action="upload" method="post" enctype="multipart/form-data">
            <input type="text" name="username"><br>
            <input type="file" name="filename"><br>
            <input type="submit" value="上传文件">
        </form>
    </body>
    </html>

     2、servlet

    package com.me.servlet;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.List;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.FileUploadException;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    import org.apache.commons.io.IOUtils;
    @WebServlet("/upload")
    public class FileuplodeServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        public FileuplodeServlet() {
            super();
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            try {
    
                //1、创建磁盘文件项工厂
                //作用:设置缓存文件的大小  设置临时文件存储的位置
                String path_temp = this.getServletContext().getRealPath("temp");
                //DiskFileItemFactory factory = new DiskFileItemFactory(1024*1024, new File(path_temp));
                DiskFileItemFactory factory = new DiskFileItemFactory();
                factory.setSizeThreshold(1024*1024);
                factory.setRepository(new File(path_temp));
                //2、创建文件上传的核心类
                ServletFileUpload upload = new ServletFileUpload(factory);
                //设置上传文件的名称的编码
                upload.setHeaderEncoding("UTF-8");
    
                //ServletFileUpload的API
                boolean multipartContent = upload.isMultipartContent(request);//判断表单是否是文件上传的表单
                if(multipartContent){
                    //是文件上传的表单
                    //***解析request获得文件项集合
                    List<FileItem> parseRequest =  upload.parseRequest(request);
                    if(parseRequest!=null){
                        for(FileItem item : parseRequest){
                            //判断是不是一个普通表单项
                            boolean formField = item.isFormField();
                            if(formField){
                                //username=zhangsan
                                String fieldName = item.getFieldName();
                                String fieldValue = item.getString("UTF-8");//对普通表单项的内容进行编码
                                
                                System.out.println(fieldName+"----"+fieldValue);
                                
                                //当表单是enctype="multipart/form-data"时 request.getParameter相关的方法
                                //String parameter = request.getParameter("username");
                                
                            }else{
                                //文件上传项
                                //文件的名
                                String fileName = item.getName();
                                //获得上传文件的内容
                                InputStream in = item.getInputStream();
                                String path_store = this.getServletContext().getRealPath("upload");
                                OutputStream out = new FileOutputStream(path_store+"/"+fileName);
                                IOUtils.copy(in, out);
                                in.close();
                                out.close();
                                
                                //删除临时文件
                                item.delete();
                                
                            }
                        }
                    }
    
                }else{
                    //不是文件上传表单
                    //使用原始的表单数据的获得方式 request.getParameter();
                }
            } catch (FileUploadException e) {
                e.printStackTrace();
            }
    
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }

    五、运行测试

     

     

  • 相关阅读:
    jquery.validate ajax提交
    linux权限不够,sh不能用
    几个简单的基类
    类型转换辅助工具类TypeCaseHelper
    linux下修改tomcat内存大小
    Hibernate,JPA注解@OneToMany_Map
    Hibernate,JPA注解@OneToMany_Set
    Hibernate,JPA注解@PrimaryKeyJoinColumn
    Hibernate,JPA注解@OneToOne_JoinColumn
    Hibernate,JPA注解@SecondaryTables
  • 原文地址:https://www.cnblogs.com/20183544-wangzhengshuai/p/12249587.html
Copyright © 2011-2022 走看看