/**
* 文件上传
*
* @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. HFDS核心技术

    HDFS 设计的前提与目标 HDFS体系结构1 HDFS体系结构2 HDFS特性与优点 高容错性保障机制 HDFS不适合的场景 HDFS2.0的新特征 HA-QJM Federation 快照 异构层 ...

  2. bat脚本自动备份文件资源

    1:xcopy命令进行文件拷贝  2:脚本内容: <span style="font-size:18px;">@echo off color 0D MODE con:  ...

  3. 显式锁(四)Lock的等待通知机制Condition

       任意一个Java对象,都拥有一组监视器方法(定义在根类Object上),主要包括:wait( ).wait(long timeout).notify().notifyAll()方法:这些方法与关 ...

  4. Where is virtualenvwrapper.sh after pip install?

      I'm trying to setup virtualenvwrapper on OSX, and all the instructions and tutorials I've found te ...

  5. OpenACC 计算构建内的自定义函数

    ▶ 使用 routine 构件创建的自定义函数,在并行调用上的差别 ● 代码,自定义一个 sqab 函数,使用内建函数 fabsf 和 sqrtf 计算一个矩阵所有元素绝对值的平方根 #include ...

  6. angularJs按需加载代码(未验证)

    一网友写的AngularJs按需加载代码,但未验证,放着备用.   application.config(               function($routeProvider) {       ...

  7. IOS HTTP访问端口

    Project dyld_sim raised exception class ENetHTTPClientException with message 'Error -1022 accessing ...

  8. FDConnection

    FDConnection 利用FDConnection获取信息,不用放query控件也可以.   FDConnection1.GetTableNames('', '', '', List);   FD ...

  9. 用FireDAC获取 SQL SERVER错误文本信息

    SQL SERVER获取错误文本信息,BDE.adoquery一直取不到,FDQuery可以了 Some DBMS, like SQL Server, return messages as an ad ...

  10. Oracle SQL Developer在进行查询的时候只显示50条数据

    在查询结果大于50条的时候,软件默认会只显示50条,向下拉会继续显示. 想要显示所有结果的话,光标放在结果集:ctrl+End或者是ctrl+PgDn都可以.