fileUpload组件二次开发扩展工具类

工具类方法说明
NO方法类型描述
01public ParameterUtil(HttpServletRequest request)构造采用默认上传参数处理用户请求
02public ParameterUtil(HttpServletRequest request,String upload_path)构造处理用户请求并设置上传目录
03public PrameterUtil(HttpServletRequest request,String upload_path,String temp_path,long max_size,long file_max_size,String defaultEncoding)构造处理用户请求并配置上传参数
05public String getParameter(String paramName)方法获取指定参数的内容
06public String[] getParameterValues(String paramName)方法获取指定参数名称对应的一组内容
07public Set<String> getParameterNames()方法获取全部上传参数名称
08public Map<String,String[]> getParameterMap()方法获取全部上传参与与数据
09public List<String> getUploadName(String paramName)方法根据参数名称获取文件保存名称
10public void saveUploadFile(String paramName,List<String> uploadFileNames)方法实现指定上传文件参数的文件保存
11public void clean()方法清除本次请求的临时文件

 工具类代码:

package cn.commons.util;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.util.*;

public class ParameterUtil {
    /**
     * 常量
     * */
    private static final long MAX_SIZE = 3145728L;
    private static final long FILE_MAX_SIZE = 1048576L;
    private static final String DEFAULT_ENCODING = "UTF-8";
    private static final String TEMP_DIR = "/temp/";
    private static final String UPLOAD_DIR = "/upload/";
    /**
     * 属性
     */
    private HttpServletRequest request;
    private String temp_dir;
    private String upload_dir;
    private String defaultEncoding;
    private long max_size;
    private long file_max_size;//用于保存封装后的参数集合,
    // key=参数名称 value=参数值 如果是文件的话,value保存文件路径名称
    private Map<String, String[]> paramMap = new HashMap<>();
    //存储临时文件名称
    private List<String> tempFileNames = new ArrayList<>();
    //记录目前请求是否封装
    private boolean isMultipartContent = false;
    private ServletFileUpload fileUpload;

    public ParameterUtil(HttpServletRequest request) {
        this(request, TEMP_DIR, UPLOAD_DIR, DEFAULT_ENCODING, MAX_SIZE, FILE_MAX_SIZE);
    }

    public ParameterUtil(HttpServletRequest request, String upload_dir) {
        this(request, TEMP_DIR, upload_dir, DEFAULT_ENCODING, MAX_SIZE, FILE_MAX_SIZE);
    }

    public ParameterUtil(HttpServletRequest request, String temp_dir, String upload_dir, String defaultEncoding, long max_size, long file_max_size) {
        if (!temp_dir.startsWith("/")) {

            this.temp_dir = "/" + temp_dir;
        }else
        if (!temp_dir.endsWith("/")) {
            this.temp_dir = temp_dir + "/";
        }else
        {
            this.temp_dir = temp_dir;
        }

        if (!upload_dir.startsWith("/")) {
            this.upload_dir = "/" + upload_dir;
        }else
        if (!upload_dir.endsWith("/")) {
            this.upload_dir = upload_dir + "/";
        }else
        {
            this.upload_dir = upload_dir;
        }
        this.request = request;
        this.defaultEncoding = defaultEncoding;
        this.max_size = max_size;
        this.file_max_size = file_max_size;
        handleParameter();
    }

    //处理参数
    private void handleParameter() {
        if (request.getContentType() == null)//直接返回不封装处理的请求,
        {
            this.isMultipartContent = false;
            return;
        }
        this.isMultipartContent = true;
        DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
        fileItemFactory.setRepository(new File(TEMP_DIR));
        fileItemFactory.setDefaultCharset(defaultEncoding);
        this.fileUpload = new ServletFileUpload(fileItemFactory);
        this.fileUpload.setFileSizeMax(file_max_size);
        this.fileUpload.setSizeMax(max_size);
        this.fileUpload.setHeaderEncoding(defaultEncoding);
        try {
            if (this.fileUpload.isMultipartContent(this.request)) {
                Map<String, List<FileItem>> map = this.fileUpload.parseParameterMap(this.request);
                for (Map.Entry<String, List<FileItem>> entry : map.entrySet()) {
                    String paramName = entry.getKey();
                    String paramValues[] = new String[entry.getValue().size()];
                    int foot = 0;
                    for (FileItem item : entry.getValue()) {
                        if (item.isFormField())//文本类型
                        {
                            paramValues[foot++] = item.getString(defaultEncoding);
                        } else//文件类型
                        {
                            //paramValues[]存储文件路径,this.tempFileNames存储临时文件名称
                            String paramFileName = createTempFile(item);
                            this.tempFileNames.add(paramFileName);
                            paramValues[foot++] = paramFileName;
                        }
                    }
                    this.paramMap.put(paramName, paramValues);
                }

            }
        } catch (Exception e) {
        }
    }
    /**
     * 根据fileItem创建临时文件,并返回临时文件名称
     */
    private String createTempFile(FileItem item) {
        if (item.getSize() > 0)//判断文件是否真实合法
        {
            try {
                String fileName = "temp."+getUUIDName(item.getContentType());
                String filePath =  request.getServletContext().getRealPath(this.temp_dir) + fileName;
                item.write(new File(filePath));
                item.delete();
                return fileName;
            } catch (Exception e) {
            }
        }
        return null;
    }
    /**
     * 获取临时文件名称集
     * */
    public List<String> getTempFileNames() {
        return tempFileNames;
    }

    /**
     * 根据fileItem的ContentType后缀 返回文件唯一命名
     */
    private String getUUIDName(String ContentType) {
        return UUID.randomUUID() + "." + ContentType.substring(ContentType.lastIndexOf("/") + 1);
    }

    /**
     * 根据指定参数名称获取单个值内容,如果是表单数据则取出文件的名称
     */
    public String getParameter(String paraName) {
        if (this.isMultipartContent)//如果封装的话 从map取出数据匹配的第一个数据
        {
            return paramMap.get(paraName)[0];
        } else {
            return this.request.getParameter(paraName);
        }
    }

    /**
     * 根据指定参数名称获取一组数据
     */
    public String[] getParameterValues(String paraName) {
        if (this.isMultipartContent) {
            return this.paramMap.get(paraName);
        } else {
            return request.getParameterValues(paraName);
        }
    }

    /**
     * 获取全部参数名称
     */
    public Set<String> getParameterNames() {
        if (this.isMultipartContent) {
            return this.paramMap.keySet();
        } else {
            return request.getParameterMap().keySet();
        }
    }

    /**
     * 返回全部参数名称及内容
     */
    public Map<String, String[]> getParameterMap() {
        if (this.isMultipartContent) {
            return this.paramMap;
        } else {
            return request.getParameterMap();
        }
    }

    /**
     * 根据指定参数名称,返回文件存储名称
     **/
    public List<String> getUploadNames(String paramName) {
        List<String> uploadNames = new ArrayList<>();//保存真实路径名称
        String tempNames[] = this.paramMap.get(paramName);
        for (String tempName : tempNames) {
            uploadNames.add(UUID.randomUUID() + "." + tempName.substring(tempName.lastIndexOf(".") + 1));
        }
        return uploadNames;
    }

    /**
     * 实现指定参数名称的文件保存,将临时文件转存到真实路径下
     * paraName:参数名称
     * uploadNames:真实路径名称集合
     */
    public void saveUploadFile(String paraName, List<String> uploadNames) {
        String[] tempName = this.paramMap.get(paraName);
        for (int i = 0; i < tempName.length; i++) {
            try {
                InputStream inputStream = new FileInputStream(new File(request.getServletContext().getRealPath(this.temp_dir) + tempName[i]));
                OutputStream outputStream = new FileOutputStream(new File(request.getServletContext().getRealPath(this.upload_dir) + uploadNames.get(i)));
                int tempByte = 0;
                byte[] data = new byte[1024];
                while ((tempByte = inputStream.read(data)) != -1) {
                    outputStream.write(data, 0, tempByte);
                }
                inputStream.close();
                outputStream.close();
            } catch (Exception e) {
            }
        }
    }

    /**
     * 清空本次临时文件
     */
    public void clean() {
        if (this.tempFileNames.size() > 0) {
            for (String tempName : this.tempFileNames) {
                File file = new File(request.getServletContext().getRealPath(this.temp_dir) + tempName);
                if (file.exists()) {
                    file.delete();
                }
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值