本人微信公众号"aeolian"~

框架中如何根据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> fileItemListMap = servletFileUpload.parseParameterMap(request);   //将request转换为Map
            if (CollectionUtil.isNotEmpty(fileItemListMap)){
                for (Map.Entry> fileItemListEntry : fileItemListMap.entrySet()){
                    String fieldName = fileItemListEntry.getKey();    //获取表单字段名
                    List 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));  //实例化一个文件参数并加到文件参数集合中去
                                }
                            }
                        }
                    }
                }
            }                        

原文链接

 

点赞

Leave a Reply

Your email address will not be published. Required fields are marked *