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));  //实例化一个文件参数并加到文件参数集合中去
                                    }
                                }
                            }
                        }
                    }
                }                        

    原文链接

  • 相关阅读:
    ftp上传下载
    java生成xml
    Java:删除某文件夹下的所有文件
    java读取某个文件夹下的所有文件
    JFileChooser 中文API
    得到java异常printStackTrace的详细信息
    关于SQL命令中不等号(!=,<>)
    ABP前端保存notify提示在Edge浏览器显示null
    关于MY Sql 查询锁表信息和解锁表
    VS2019 backspace键失效,无法使用
  • 原文地址:https://www.cnblogs.com/aeolian/p/10217814.html
Copyright © 2011-2022 走看看