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

    原文链接

  • 相关阅读:
    gc buffer busy/gcs log flush sync与log file sync
    给Oracle年轻的初学者的几点建议
    Android 编程下帧动画在 Activity 启动时自动运行的几种方式
    Android 编程下 Touch 事件的分发和消费机制
    Java 编程下 static 关键字
    Java 编程下 final 关键字
    Android 编程下模拟 HOME 键效果
    Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated ?
    Extjs4 大型项目目录结构重构
    [转]SQLServer 2008 允许远程连接的配置方法
  • 原文地址:https://www.cnblogs.com/aeolian/p/10217814.html
Copyright © 2011-2022 走看看