package com.panda.common.file;
import com.panda.common.exception.FileNameLengthLimitExceededException;
import com.panda.common.exception.FileSizeLimitExceededException;
import com.panda.common.exception.InvalidExtensionException;
import com.panda.common.utils.StringUtil;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.springframework.util.ClassUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.UUID;
/**
* 文件上传工具类
*/
public class FileUploadUtils {
/**
* 默认大小 50M
*/
public static final long DEFAULT_MAX_SIZE = 50 * 1024 * 1024;
/**
* 默认的文件名最大长度 100
*/
public static final int DEFAULT_FILE_NAME_LENGTH = 100;
/**
* 默认存储图片目录
*/
private static final String parentPath = ClassUtils.getDefaultClassLoader().getResource("static/images").getPath();
public static final String actorPath = "/actor";
public static final String cinemaPath = "/cinema";
public static final String moviePath = "/movie";
public static final String userPath = "/user";
/**
* 默认上传的地址
*/
private static String defaultBaseDir = userPath;
public static void setDefaultBaseDir(String defaultBaseDir) {
FileUploadUtils.defaultBaseDir = defaultBaseDir;
}
public static String getDefaultBaseDir() {
return defaultBaseDir;
}
public static String getParentPath() {
return parentPath;
}
/**
* 以默认配置进行文件上传
*
* @param file 上传的文件
* @return 文件名称
* @throws Exception
*/
public static final String upload(MultipartFile file) throws IOException {
try {
return upload(getParentPath() + getDefaultBaseDir(), file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
} catch (Exception e) {
throw new IOException(e.getMessage(), e);
}
}
/**
* 文件上传
*
* @param baseDir 相对应用的基目录
* @param file 上传的文件
* @param allowedExtension 上传文件类型
* @return 返回上传成功的文件名
* @throws FileSizeLimitExceededException 如果超出最大大小
* @throws FileNameLengthLimitExceededException 文件名太长
* @throws IOException 比如读写文件出错时
* @throws InvalidExtensionException 文件校验异常
*/
public static final String upload(String baseDir, MultipartFile file, String[] allowedExtension)
throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException,
InvalidExtensionException {
int fileNamelength = file.getOriginalFilename().length();
if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) {
throw new FileNameLengthLimitExceededException("文件名称长度不能超过" + FileUploadUtils.DEFAULT_FILE_NAME_LENGTH);
}
assertAllowed(file, allowedExtension);
String fileName = extractFilename(file);
File desc = getAbsoluteFile(baseDir, fileName);
file.transferTo(desc);
String pathFileName = getPathFileName(baseDir, fileName);
return pathFileName;
}
/**
* 编码文件名 如 : images/user/2021/3/4/***.png
*/
public static final String extractFilename(MultipartFile file) {
String fileName = file.getOriginalFilename();
String extension = getExtension(file);
fileName = DateFormatUtils.format(new Date(), "yyyy/MM/dd") + "/" + UUID.randomUUID().toString().replaceAll("-", "") + "." + extension;
return fileName;
}
private static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException {
File desc = new File(uploadDir + File.separator + fileName);
if (!desc.getParentFile().exists()) {
desc.getParentFile().mkdirs();
}
if (!desc.exists()) {
desc.createNewFile();
}
return desc;
}
private static final String getPathFileName(String uploadDir, String fileName) throws IOException {
int dirLastIndex = parentPath.length() + 1;
String currentDir = StringUtils.substring(uploadDir, dirLastIndex);
String pathFileName = "/images/" + currentDir + "/" + fileName;
return pathFileName;
}
/**
* 文件大小校验
*
* @param file 上传的文件
* @return
* @throws FileSizeLimitExceededException 如果超出最大大小
* @throws InvalidExtensionException
*/
public static final void assertAllowed(MultipartFile file, String[] allowedExtension)
throws FileSizeLimitExceededException, InvalidExtensionException {
long size = file.getSize();
if (DEFAULT_MAX_SIZE != -1 && size > DEFAULT_MAX_SIZE) {
throw new FileSizeLimitExceededException("文件大小不能超过" + DEFAULT_MAX_SIZE / 1024 / 1024 + "MB");
}
String fileName = file.getOriginalFilename();
String extension = getExtension(file);
if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension)) {
if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION) {
throw new InvalidExtensionException("图片格式不支持" + extension + "格式");
}
}
}
/**
* 判断MIME类型是否是允许的MIME类型
*
* @param extension
* @param allowedExtension
* @return
*/
public static final boolean isAllowedExtension(String extension, String[] allowedExtension) {
for (String str : allowedExtension) {
if (str.equalsIgnoreCase(extension)) {
return true;
}
}
return false;
}
/**
* 获取文件名的后缀
*
* @param file 表单文件
* @return 后缀名
*/
public static final String getExtension(MultipartFile file) {
String extension = FilenameUtils.getExtension(file.getOriginalFilename());
if (!StringUtil.isNotEmpty(extension)) {
extension = MimeTypeUtils.getExtension(file.getContentType());
}
return extension;
}
/**
* 删除文件
*
* @param filePath 文件
* @return
*/
public static boolean deleteFile(String filePath) {
boolean flag = false;
File file = new File(filePath);
// 路径为文件且不为空则进行删除
if (file.isFile() && file.exists()) {
file.delete();
flag = true;
}
return flag;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于SpringBoot+Vue的电影售票及影院管理系统源码+sql数据库(高分毕设).zip 【资源说明】 该项目是个人毕设项目源码,评审分达到95分,都经过严格调试,确保可以运行!放心下载使用。 该项目资源主要针对计算机、自动化等相关专业的学生或从业者下载使用,也可作为期末课程设计、课程大作业、毕业设计等。 具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现类似其他功能。 后端:Spring Boot + Mybatis 实现功能: 售票子系统:用户浏览电影信息,电影分类查看,搜索查看,购票操作(未实现支付沙箱),超时取消订单等 管理子系统:管理员管理影院信息,电影信息,用户角色,角色权限,查看订单信息等功能 安全校验:使用shiro安全框架进行用户请求过滤,密码加密 数据库连接池:druid 分页插件:pageHelper vue安装对应的版本: nodejs 14.xx npm 6.xx vue 2.x C:\Users\dell>node -v v14.17.6 C:\Users\dell>npm -v 6.14.15 C:\Use
资源推荐
资源详情
资源评论
收起资源包目录
基于SpringBoot+Vue的电影售票及影院管理系统源码+sql数据库(高分毕设).zip (312个子文件)
.browserslistrc 30B
.browserslistrc 30B
iconfont.css 2KB
iconfont.css 2KB
global.css 537B
global.css 90B
.editorconfig 148B
.editorconfig 148B
iconfont.eot 2KB
iconfont.eot 2KB
.gitignore 395B
.gitignore 395B
.gitignore 395B
.gitignore 395B
.gitignore 231B
.gitignore 231B
index.html 613B
index.html 613B
favicon.ico 22KB
favicon.ico 22KB
FileUploadUtils.java 7KB
SysBillController.java 5KB
SysUserServiceImpl.java 4KB
CancelTimeoutBillUtil.java 4KB
ShiroConfig.java 3KB
GlobalExceptionHandler.java 3KB
FileUploadController.java 3KB
JwtUtil.java 3KB
JwtFilter.java 3KB
CustomerRealm.java 3KB
SysUserController.java 2KB
ResponseResult.java 2KB
SysMovieCategoryController.java 2KB
SysMovieController.java 2KB
SysMovieServiceImpl.java 2KB
SysResourceServiceImpl.java 2KB
SysSessionController.java 2KB
QuartzConfig.java 2KB
SysSession.java 2KB
SysCinemaController.java 2KB
SysResourceController.java 2KB
SessionSeatsUtil.java 2KB
SysRoleController.java 2KB
SysMovieCategoryServiceImpl.java 2KB
SysSessionServiceImpl.java 2KB
SysRoleServiceImpl.java 2KB
BaseController.java 2KB
SysBill.java 1KB
SysHallController.java 1KB
SysHall.java 1KB
SysMovieMapper.java 1KB
PageBuilder.java 1KB
SysSessionMapper.java 1KB
Page.java 1KB
SysBillServiceImpl.java 1KB
SysUser.java 1KB
ServletUtil.java 1KB
SysHallServiceImpl.java 1KB
SysCinema.java 1KB
MimeTypeUtils.java 1012B
SysMovie.java 990B
StringUtil.java 905B
SysCinemaServiceImpl.java 776B
SysRole.java 769B
SysUserMapper.java 733B
SysResource.java 721B
SysResourceMapper.java 704B
ApplicationContextUtils.java 693B
SysMovieService.java 686B
CrosConfig.java 677B
SysMovieCategoryMapper.java 650B
SaltUtils.java 632B
SysUserService.java 613B
SysMovieCategoryService.java 595B
SysSessionService.java 591B
SysMovieCategory.java 581B
LoginUser.java 545B
SysRoleMapper.java 536B
HttpStatus.java 503B
SysMovieVo.java 501B
SysSessionVo.java 499B
PandaAdminApplicationTests.java 480B
JwtToken.java 467B
SysMovieToCategory.java 464B
SysBillVo.java 464B
SysResourceService.java 456B
FileNameLengthLimitExceededException.java 396B
SysUserVo.java 390B
FileSizeLimitExceededException.java 372B
SysBillService.java 370B
SysRoleService.java 366B
SysBillMapper.java 362B
InvalidExtensionException.java 351B
SysHallService.java 342B
SysHallMapper.java 338B
PandaAdminApplication.java 322B
SysCinemaMapper.java 319B
DataNotFoundException.java 310B
MovieRankingList.java 293B
ApplicationConfiguration.java 271B
共 312 条
- 1
- 2
- 3
- 4
资源评论
- illonSuT2024-03-27资源很实用,内容详细,值得借鉴的内容很多,感谢分享。
z同学的编程之路
- 粉丝: 1858
- 资源: 2130
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功