• Commons FileUpLoad 两种上传方式解


    traditional API (传统方式)

    //上传路径
    File file = new File("C:/upload");
    //临时文件路径
    File tempFile = new File("C:/uploadtemp");
    
    if(!file.exists()) {
        file.mkdir();
    }
    
    if(!tempFile.exists()) {
        tempFile.mkdir();
    }
    //判断 request 是一个文件上传的 request
    //通过 ServletFileUpload 类的静态方法 isMultipartContent 来判断
    if(ServletFileUpload.isMultipartContent(request)) {
        //用 DiskFileItemFactory 创建新的 file items (只是临时的)
        //DiskFileItemFactory 创建FileItem 实例,并保存其内容在<b>内存</b>或者<b>硬盘中</b>
        //通过一个阀值来决定这个 FileItem 实例是存放在<b>内存</b>或者<b>硬盘中</b>
        DiskFileItemFactory factory = new DiskFileItemFactory();
        //设置阀值大小
        //不设置的话,默认10k
        //超过这个阀值,FileItem将直接写入到磁盘
        factory.setSizeThreshold(1024*10);
        //设置临时文件夹
        //不设置,默认为系统默认Temp文件路径,调用 System.getProperty("java.io.tmpdir") 获取
        //超过阀值的 FileItem 实例将存放在这个目录中
        factory.setRepository(tempFile);
        //构造servletFileUpload 的实例,该实例提供工厂模式创建FileItem的DiskFileItemFactory实例
        ServletFileUpload fileUpload = new ServletFileUpload(factory);
        //设置一个<b>完整的请求</b>允许的最大大小(注意是完整请求,包括非file类型的表单,比如Text类型)
        fileUpload.setSizeMax(10*1024*1024);
        //设置所允许的最大的单个上传文件大小(对应一个FileItem对象)
        //fileUpload.setFileSizeMax(10*1024*1024);
    
        try {
            //每一个FileItem 对应一个 request 请求中from表单中的 input 元素
            //解析 request 请求,将request中提交的值存入List数组
            List<FileItem> items = fileUpload.parseRequest(request);
    
            for(FileItem item : items) {
                //是不是一个文件上传组件
                if(!item.isFormField()) {
                    String name = item.getName();
                    System.out.println("name:" + name);
                    System.out.println("length:" + item.getSize());
                    item.write(new File("C:/upload/"+name));
                } else {
                    String desc = item.getString("UTF-8");
                    System.out.println("文件描述:" + desc);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    } else {
        throw new RuntimeException("请设置form表单的enctype属性");
    }

    Streaming API

    //设置文件上传路径
    String UploadFilePath = "d:/upload";
    //限制文件大小
    //通过 request.getHeader("Content-Length") 获取request 请求内容长度来限制
    if(ServletFileUpload.isMultipartContent(request)) {
    
        //创建ServletFileUpload实例
        ServletFileUpload upload = new ServletFileUpload();
        try {
            //解析request 请求 并返回FileItemStream 的iterator 实例
            FileItemIterator iter = upload.getItemIterator(req);
            while (iter.hasNext()) {
                FileItemStream item = iter.next();
                String name = item.getFieldName();
                InputStream stream = item.openStream();
                if (item.isFormField()) {
                    System.out.println("Form field " + name + " with value "
                            + Streams.asString(stream) + " detected.");
                } else {
                    System.out.println("File field " + name + " with file name "
                            + item.getName() + " detected.");
                    // Process the input stream
                    //System.out.println(Streams.asString(stream));
                    System.out.println("shuru:");
                    String filename = new Scanner(System.in).next();
                    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(new File("e:/upload"),"ez.zip")));
                    BufferedInputStream bis = new BufferedInputStream(stream);
                    byte[] buffer = new byte[1024];
                    int len = -1;
                    while (-1 != (len = bis.read(buffer))){
                        bos.write(buffer,0,len);
                    }
                    bis.close();
                    bos.flush();
                    bos.close();
    
                    PrintWriter out = resp.getWriter();
                    out.write("完成");
                    System.out.println("wanchengle ");
                }
            }
        } catch (FileUploadException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }
    } else {
        throw new RuntimeException("请设置form表单的enctype属性");
    }
  • 相关阅读:
    OpenStack--Rabbitmq组件消息队列
    Redis-主从
    haproxy mycat mysql 读写分离MHA高可用
    mysql小白系列_14 线上故障分析与排错
    mysql小白系列_13 Online DDL
    mysql小白系列_12 sysbench
    mysql小白系列_11 MHA补充
    mysql小白系列_11 MHA
    mysql小白系列_10 mysql主从复制原理
    mysql小白系列_09 mysql性能优化关键点
  • 原文地址:https://www.cnblogs.com/caoyc/p/5567121.html
Copyright © 2020-2023  润新知