zoukankan      html  css  js  c++  java
  • 框架中如何根据fileupload工具包实现文件上传功能

    工具包

    Apache-fileupload.jar – 文件上传核心包。

    Apache-commons-io.jar – 这个包是fileupload的依赖包。同时又是一个工具包。

    代码 

    servletFileUpload官方API

            /*获取tomcat的work目录,作为上传时存放的临时路径(超过最大值时才存放)*/
            File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
    
            /**
             * DiskFileItemFactory构造的两个参数
             *  第一个参数:sizeThreadHold - 设置缓存(内存)保存多少字节数据,默认为10240字节,即10K
             *    如果一个文件没有大于10K,则直接使用内存直接保存成文件就可以了。
             *    如果一个文件大于10K,就需要将文件先保存到临时目录中去。
             *  第二个参数 File 是指临时目录位置 - 可以不用tomcat的work目录可以用任意一个目录
             */
            DiskFileItemFactory fileItemFactory = new DiskFileItemFactory(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD, repository);
            servletFileUpload = new ServletFileUpload(fileItemFactory);
    
            int uploadLimit = ConfigHelper.getAppUploadLimit();  //获取文件上传限制默认为10(M)
            if (uploadLimit != 0){
                servletFileUpload.setFileSizeMax(uploadLimit*1024*1024);   //设置单文件最大大小为10M
            }
    
                /*解析request*/
                Map<String,List<FileItem>> fileItemListMap = servletFileUpload.parseParameterMap(request);   //将request转换为Map
                if (CollectionUtil.isNotEmpty(fileItemListMap)){
                    for (Map.Entry<String,List<FileItem>> fileItemListEntry : fileItemListMap.entrySet()){
                        String fieldName = fileItemListEntry.getKey();    //获取表单字段名
                        List<FileItem> fileItemList = fileItemListEntry.getValue();
    
                        if (CollectionUtil.isNotEmpty(fileItemListMap)){
                            for (FileItem fileItem:fileItemList){
                                if (fileItem.isFormField()){   //如果是表单字段
                
                                }else{   //如果是文件
                                    String fileName = FileUtil.getRealFileName(new String(fileItem.getName().getBytes(),"UTF-8"));   //获取文件名
                                    if (StringUtil.isNotEmpty(fileName)){  //如果文件名不为空
                                        long fileSize = fileItem.getSize();  //获取文件大小
                                        String contentType = fileItem.getContentType();   //获取文件类型
                                        InputStream inputStream = fileItem.getInputStream();   //获取文件输入流
                                        fileParamList.add(new FileParam(fieldName,fileName,fileSize,contentType,inputStream));  //实例化一个文件参数并加到文件参数集合中去
                                    }
                                }
                            }
                        }
                    }
                }                        

    原文链接

  • 相关阅读:
    Codeforce821E Okabe and El Psy Kongroo
    hihocoder1497 Queen Attack
    hihocoder 1523数据重排
    codeforce 780C Andryusha and Colored Balloons
    codeforce 768B Code For 1
    hihoCoder1270 建造基地 完全背包
    UVA10054 The Necklace 欧拉回路+并查集
    Codeforces Round #480 (Div. 2) C 贪心 D 数字、思维 E 树上倍增
    ZOJ 4029 Now Loading!!! 思维
    西安电子科技大学第16届程序设计竞赛网络同步赛 E dp G 找规律
  • 原文地址:https://www.cnblogs.com/aeolian/p/10217814.html
Copyright © 2011-2022 走看看