• 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属性");
    }
  • 相关阅读:
    通过android XML 创建图形,降低对美工的依赖
    ViewPager学习之仿微信主界面
    Linux学习日志--文件搜索命令
    蓝桥杯 历届试题 小朋友排队 【树状数组】+【逆序数】
    操作系统——IO管理
    Mac和PC在工作中管理的对比(5)
    虚拟地址空间分配
    UVA 624 CD(DP + 01背包)
    【CSS】瀑布流布局的两种方式:传统多列浮动和绝对定位布局
    外煤关注:百度收购大部分糯米股份
  • 原文地址:https://www.cnblogs.com/caoyc/p/5567121.html
Copyright © 2020-2023  润新知