根据自我需求自定义文本类,自定义如下:
public class FileUtil {
private static final Logger logger = LoggerFactory.getLogger(FileUtil.class);
// 文件允许格式
private static String[] ALLOW_FILES = {".rar", ".doc", ".docx", ".zip", ".pdf", ".txt", ".xlsx", ".gif",
".png", ".jpg", ".jpeg", ".xls"};
/**
* 返回新生文件名+扩展名(即要存入服务器本地的文件名)
*
* @param fileExt 文件扩展名
* @return
*/
public static String makeFileName(String fileExt) {
// 为防止文件覆盖的现象发生,要为上传文件产生一个唯一的文件名
return UUID.randomUUID().toString().replaceAll("-", "") + "." + fileExt;
}
/**
* 将文件存入本地路径
*
* @param rootPath 根路径
* @param folder 根路径下的目录
* @param multipartFile 文件
*/
public static InfoAttachment saveFile(String rootPath, String folder, MultipartFile multipartFile) {
try {
Date startDate = new Date();
logger.info("文件上传开始====================");
// 判断文件不为空及判断文件大小
if (multipartFile.getSize() == 0 || multipartFile.isEmpty()) {
try {
throw new Exception("文件为空");
} catch (Exception e) {
e.printStackTrace();
}
}
String size = FileUtil.getSize(multipartFile.getSize());
// System.out.println("size:" + size);
logger.info("文件大小:" + size);
// 得到上传文件的文件名
String fileName = FileUtil.getFileName(multipartFile.getOriginalFilename());
logger.info("文件名:" + fileName);
// 得到上传文件的扩展名
String fileExt = FileUtil.getFileExt(multipartFile.getOriginalFilename());
logger.info("上传的文件的扩展名是:" + fileExt);
//构建附件对象
InfoAttachment attachment = new InfoAttachment();
// 如果需要限制上传的文件类型,那么可以通过文件的扩展名来判断上传的文件类型是否合法
if (!FileUtil.checkFileType(fileName)) {
attachment.setFlag("文件:" + fileName + ",上传文件扩展名是不允许的扩展名:" + fileExt);
return attachment;
}
// 得到存文件的新文件名(包含扩展名)
String saveFileName = FileUtil.makeFileName(fileExt);
// 上传时生成临时文件保存目录
String savePath = rootPath + folder + "/" + TimeUtil.getMonthTamp();
// System.out.println("临时文件保存目录:" + savePath);
// 保存的绝对路径
String saveRealPath = savePath + "//" + saveFileName;
// System.out.println("绝对路径:" + saveRealPath);
// 保存的相对路径
String relativePath = folder + "/" + TimeUtil.getMonthTamp() + "/" + saveFileName;
// System.out.println("相对路径:" + relativePath);
logger.info("保存的绝对路径为:" + saveRealPath);
logger.info("保存的相对路径为:" + relativePath);
// 创建目录
File tmpDir = new File(savePath);
if (!tmpDir.exists()) {
tmpDir.mkdirs();
}
try {
try {
multipartFile.transferTo(new File(saveRealPath));
} catch (IOException e) {
e.printStackTrace();
}
// System.out.println(fileName + "文件上传成功");
logger.info("文件:" + fileName + ",上传成功");
logger.info("文件上传结束====================用时" + TimeUtil.calLastedTime(startDate) + "毫秒");
attachment.setAttName(fileName);
attachment.setAttType(fileExt);
attachment.setAttUrl(relativePath);
attachment.setAttSize(size);
} catch (Exception e) {
attachment.setFlag("文件上传失败!");
return attachment;
} finally {
// 关闭输出流
// out.close();
// 关闭输入流
// is.close();
}
return attachment;
}catch(Exception e){
e.printStackTrace();
return null;
}
}
/**
* 获取文件扩展名
*
* @param fileName
* @return
*/
public static String getFileExt(String fileName) {
return fileName.substring(fileName.lastIndexOf(".")+1).toLowerCase();
}
/**
* 传入原始文件名获取文件名
*
* @param originalName
* @return
*/
public static String getFileName(String originalName) {
// 注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的
// 如: C:\Users\H__D\Desktop\1.txt 而有些则是 : 1.txt
// 处理获取到的上传文件的文件名的路径部分,只保留文件名部分
return originalName.substring(originalName.lastIndexOf("\\") + 1);
}
/**
* 文件大小,返回kb.mb
*
* @return
*/
public static String getSize(long fileLength) {
String size = "";
DecimalFormat df = new DecimalFormat("#.00");
if (fileLength < 1024) {
size = df.format((double) fileLength) + "BT";
} else if (fileLength < 1048576) {
size = df.format((double) fileLength / 1024) + "KB";
} else if (fileLength < 1073741824) {
size = df.format((double) fileLength / 1048576) + "MB";
} else {
size = df.format((double) fileLength / 1073741824) + "GB";
}
return size;
}
/**
* 文件类型判断
*
* @param fileName
* @return
*/
public static boolean checkFileType(String fileName) {
// 定义允许上传的文件扩展名
Iterator<String> type = Arrays.asList(ALLOW_FILES).iterator();
while (type.hasNext()) {
String ext = type.next();
if (fileName.toLowerCase().endsWith(ext)) {
return true;
}
}
return false;
}
}