Java一个文件上传工具类

原文链接:https://my.oschina.net/caryliu/blog/264524
/**
 * 文件上传
 * 
 * @author cary
 * @since 2012-12-19 下午2:22:12
 */
public class FileUploader {
    static final String UPLOAD_PATH_KEY = "upload.dir";
    private static Logger logger = Logger.getLogger(FileUploader.class);

    /**
     * 定义允许上传的文件扩展名
     */
    private Map<String, String> extMap = new HashMap<String, String>();
    /**
     * 文件上传目录
     */
    private String savePath;
    /**
     * 文件完整目录
     */
    private String saveUrl;

    /**
     * 空构造器
     */
    public FileUploader() {
        // 允许上传的文件类型
        extMap.put("extName", "gif,jpg,jpeg,png,bmp,xls,xlsx");
    }

    /**
     * @param request 请求对象
     * @param upload 被上传的文件
     * @param uploadFileName 被上传的文件名
     * @param dirName 文件类型对应的路径
     * @param maxSize 文件大小阈值
     * @return
     * @throws IOException
     */
    public String[] uploadFile(HttpServletRequest request, File upload, String uploadFileName, String dirName,
            Long maxSize) throws IOException {
        /**
         * 保存上传文件返回信息
         */
        String[] infos = new String[2];
        /**
         * 获取文件上传目录
         */
        String extName = uploadFileName.substring(uploadFileName.lastIndexOf(".") + 1, uploadFileName.length());
        infos[0] = this.validateFields(request, extName, dirName, maxSize);
        String prefixName = uploadFileName.substring(0, uploadFileName.lastIndexOf("."));
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhh24mmss");
        String ymd = sdf.format(new Date());
        String realName = prefixName + ymd + "." + extName;
        /**
         * 获取文件全路径
         */
        saveUrl = savePath + realName;
        if (infos[0].equals("true")) {
            saveFile(upload, savePath, realName);
            infos[1] = saveUrl;
        }
        return infos;
    }

    /**
     * 上传验证,并初始化文件目录
     * 
     * @param request 请求对象
     * @param extName 扩展名
     * @param dirName 子目录名
     * @param maxSize 文件大小阈值
     * @throws IOException
     */
    private String validateFields(HttpServletRequest request, String extName, String dirName, Long maxSize)
            throws IOException {
        String errorInfo = "true";
        // 获取内容类型
        String contentType = request.getContentType();
        String extType = extMap.get("extName");
        int contentLength = request.getContentLength();
        String path = ConfigUtil.getString(FileUploader.UPLOAD_PATH_KEY);
        savePath = path + "/" + dirName + "/";
        File uploadDir = new File(savePath);
        if (contentType == null || !contentType.startsWith("multipart")) {
            logger.error("请求不包含multipart/form-data流");
            return "请求不包含multipart/form-data流";
        }
        if (extType.indexOf(extName) == -1) {
            return "不允许上传的文件类型[" + "." + extName + "]";
        }
        if (maxSize < contentLength) {
            logger.error("上传文件大小超出文件最大大小");
            return "上传文件大小超出文件最大大小[" + maxSize + "]";
        }
        if (!ServletFileUpload.isMultipartContent(request)) {
            return errorInfo = "请选择文件";
        }
        if (!uploadDir.exists()) {// 检查目录
            logger.warn("上传目录[" + savePath + "]不存在");
            uploadDir.mkdir();
        }
        if (!uploadDir.canWrite()) {
            return "上传目录[" + savePath + "]没有写权限";
        }
        return errorInfo;
    }

    /**
     * 保存文件
     * 
     * @param upload 待上传文件
     * @param savePath 文件存储目录
     * @param realName 原始文件名
     * @throws IOException
     */
    public void saveFile(File upload, String savePath, String realName) throws IOException {
        File target = new File(savePath, realName);
        FileUtils.copyFile(upload, target);
    }

    public static void main(String[] args) {
        File dirFile = new File("/usr/local/upload/excel");
        if (!dirFile.exists()) {
            dirFile.mkdirs();
        }
    }
2.action调用代码

FileUploader fileUploader = new FileUploader();

  try {
  Long maxSize = getMaxSize();
  String[] infos = fileUploader.uploadFile(getRequest(), upload, uploadFileName, EXCEL_DIR, maxSize);
  logger.info("upload info:" + infos[0]);
  logger.info("upload path:" + infos[1]);

}catch (IOException e) {

  logger.error("上传文件发生异常" + e);

}

 

 

转载于:https://my.oschina.net/caryliu/blog/264524

上一篇:1287. 递增的三元子序列


下一篇:Java 队列模拟