/**
* 文件上传
*
* @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[];
/**
* 获取文件上传目录
*/
String extName = uploadFileName.substring(uploadFileName.lastIndexOf(".") + , uploadFileName.length());
infos[] = this.validateFields(request, extName, dirName, maxSize);
String prefixName = uploadFileName.substring(, uploadFileName.lastIndexOf("."));
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhh24mmss");
String ymd = sdf.format(new Date());
String realName = prefixName + ymd + "." + extName;
/**
* 获取文件全路径
*/
saveUrl = savePath + realName;
if (infos[].equals("true")) {
saveFile(upload, savePath, realName);
infos[] = 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) == -) {
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);

}

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java一个文件上传工具类的更多相关文章

  1. spring mvc 文件上传工具类

    虽然文件上传在框架中,已经不是什么困难的事情了,但自己还是开发了一个文件上传工具类,是基于springmvc文件上传的. 工具类只需要传入需要的两个参数,就可以上传到任何想要上传的路径: 参数1:Ht ...

  2. spring boot 文件上传工具类(bug 已修改)

    以前的文件上传都是之前前辈写的,现在自己来写一个,大家可以看看,有什么问题可以在评论中提出来. 写的这个文件上传是在spring boot 2.0中测试的,测试了,可以正常上传,下面贴代码 第一步:引 ...

  3. 文件上传工具类 UploadUtil.java

    package com.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ja ...

  4. FastDFS 文件上传工具类

    FastDFS文件上传工具类 import org.csource.common.NameValuePair; import org.csource.fastdfs.ClientGlobal; imp ...

  5. Java 使用 commons-fileupload 实现文件上传工具类

    依赖包 文件上传可以使用 Apache 文件上传组件, commons-fileupload, 它依赖于 commons-io commons-io.jar: https://repo1.maven. ...

  6. PHP封装一个通用好用的文件上传处理类

    封装一个文件上传类完成基本功能如下: 1.可上传多个或单个文件 2.上传成功返回一个或多个文件名 3.上传失败则返回每个失败文件的错误信息 上传类中的基本功能: 1.构造参数,用户可以自定义配置参数, ...

  7. maven工程 java 实现文件上传 SSM ajax异步请求上传

    java ssm框架实现文件上传 实现:单文件上传.多文件上传(单选和多选),并且用 ajax 异步刷新,在当前界面显示上传的文件 首先springmvc的配置文件要配置上传文件解析器: <!- ...

  8. java的文件上传和下载 抄袭别人的.在底部有说明.

    =======后续 这里采用的是输出流的方式,我电脑装的是windows系统,测试没有问题,但是当把项目放到Linux系统上跑时,就会出现保存位置错误的情况, 指定的路径就会被当做文件名的一部分保存了 ...

  9. CentOS下安装配置NFS并通过Java进行文件上传下载

    1:安装NFS (1)安装 yum install nfs-utils rpcbind (2)启动rpcbind服务 systemctl restart rpcbind.service 查看服务状态 ...

随机推荐

  1. PHP图片压缩

    <?php /** * 分享请保持网址.尊重别人劳动成果.谢谢. * 图片压缩类:通过缩放来压缩.如果要保持源图比例,把参数$percent保持为1即可. * 即使原比例压缩,也可大幅度缩小.数 ...

  2. (3/24)轻松配置 webpack3.x入口、出口配置项

    在上一节中我们只是简单的尝了一下webpack的鲜,对其有了基本的了解,对于上一节当中的打包方式,在实际开发中并不使用,而是通过webpack的配置文件的方式进行设置的,所以该节就在上一节的基础上学一 ...

  3. 完整版openlayer的例子及中文注释(完整中文版)

    //@sourceURL=PersonLocation.jsvar window_temp = { onbeforeunload: null, DEBUG_MODE: false, MAPLIST: ...

  4. redis、memcache和mongodb各自的优缺点是什么

    redis.memcahce 比较相似,但与 mongodb 完全不同,几乎没有可比性. 总的来说 redis/memcache 是基于内存的,讲究的是性能,多用作缓存层,比如说存放session.而 ...

  5. IE浏览器中的加载项怎么删除

    IE浏览器中的加载项是一些软件或者浏览器的功能控件,我们可以通过禁用.开启来控制是否使用某些加载项,同时可以将一些加载项删除. 比如当我们遇到了一些不好的加载项,想要将它删除,通过这篇经验,教大家怎么 ...

  6. J2SE 8的Lambda --- functions

    functions //1. Runnable 输入参数:无 返回类型void new Thread(() -> System.out.println("In Java8!" ...

  7. Activity服务类-5 IdentityService服务类

    一.内置用户组(角色)设计表概念 用户和组(或者叫做角色),多对多关联,通过关联表实现 act_id_user 用户表: act_id_group 用户组表: act_id_membership 用户 ...

  8. 递归实现tree JQuery

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  9. PL/SQL Developer安装教程以及汉化包安装教程

    一.安装PL/SQL 1.百度下载plsql破解版软件,官网只能使用30天 2.双击plsqldev906.exe进行安装,点击 iagree 3.默认是安装在c盘,可以根据自己需要更改安装目录 4. ...

  10. ArrayList 原理(2)

    1. 概述 关于Java集合的小抄中是这样描述的: 以数组实现.节约空间,但数组有容量限制.超出限制时会增加50%容量,用System.arraycopy()复制到新的数组,因此最好能给出数组大小的预 ...