package com.gouyan.common.file;
import com.gouyan.common.utils.StringUtil;
import com.gouyan.common.exception.FileNameLengthLimitExceededException;
import com.gouyan.common.exception.FileSizeLimitExceededException;
import com.gouyan.common.exception.InvalidExtensionException;
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/2020/12/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;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1、技术栈 springboot+vue+mybatis+maven+nodeJS 2、后端配置 找到pod-admin模块下的resources文件夹内的application.yml,端口在最下方配置 同目录下的application-druid.yml文件内配置mysql的数据源 之后重新导入maven依赖即可 3、前端配置 进入pod-ui文件夹内,执行npm install命令 在根目录下vue.config.js文件中修改运行端口 进入src->components目录,找到global_variable.vue文件,其中有两个属性,base属性表示访问后端图片的路径,baseUrl表示通过axios访问后端接口的默认路径(若本地运行,均修改为http://127.0.0.1:8181即可,端口为后端配置的端口号) 运行前端vue项目,进入pod-ui文件夹,执行npm run serve命令即可运行 4、登录账号 前台和后台默认登录用户为:用户名:admin 密码:123456 。数据库中其他用户的密码也均为123456
资源推荐
资源详情
资源评论
收起资源包目录
基于SpringBoot + Vue 实现的电影在线售票系统 (429个子文件)
.browserslistrc 30B
.browserslistrc 30B
iconfont.css 2KB
iconfont.css 2KB
global.css 537B
global.css 90B
iconfont.eot 2KB
iconfont.eot 2KB
.gitignore 231B
index.html 613B
index.html 613B
SysUserController.http 1KB
SysActorController.http 1KB
SysCinemaController.http 1KB
SysSessionController.http 1023B
SysMovieCommentController.http 927B
SysMovieController.http 868B
SysHallController.http 834B
SysBillController.http 750B
SysResourceController.http 714B
SysMovieRuntimeController.http 647B
SysRoleController.http 621B
SysCinemaAreaController.http 608B
SysUserHobbyController.http 525B
SysMovieCategoryController.http 524B
SysHallCategoryController.http 520B
SysMovieAgeController.http 515B
SysCinemaBrandController.http 511B
SysActorRoleController.http 509B
SysMovieAreaController.http 490B
SysMovieToCategoryController.http 461B
SysActorMovieController.http 426B
favicon.ico 4KB
favicon.ico 4KB
FileUploadUtils.java 7KB
SysMovieCommentController.java 4KB
SysUserServiceImpl.java 4KB
SysBillController.java 3KB
GlobalExceptionHandler.java 3KB
SysHallController.java 3KB
ShiroConfig.java 3KB
FileUploadController.java 3KB
CustomerRealm.java 3KB
JwtFilter.java 3KB
JwtUtil.java 3KB
SysCinemaController.java 2KB
SysMovieServiceImpl.java 2KB
SysMovieController.java 2KB
ResponseResult.java 2KB
SysUserController.java 2KB
SysSession.java 2KB
SysResourceServiceImpl.java 2KB
SysMovieMapper.java 2KB
SysMovie.java 2KB
SysHall.java 2KB
SysResourceController.java 2KB
SysRoleController.java 2KB
SysMovieAgeController.java 2KB
SysSessionController.java 2KB
SysMovieAreaController.java 2KB
SysActorController.java 2KB
SysMovieCategoryController.java 2KB
BaseController.java 2KB
SysRoleServiceImpl.java 2KB
SysHallCategoryController.java 2KB
SysMovieRuntimeController.java 2KB
SysActor.java 2KB
SysMovieCommentServiceImpl.java 2KB
SysCinemaAreaController.java 2KB
SysActorRoleController.java 2KB
SysCinema.java 2KB
SysUserHobbyController.java 2KB
SysCinemaBrandController.java 2KB
SysSessionServiceImpl.java 1KB
SysMovieToCategoryController.java 1KB
PageBuilder.java 1KB
SysCinemaServiceImpl.java 1KB
SysActorMovieController.java 1KB
Page.java 1KB
SysUser.java 1KB
SysBillServiceImpl.java 1KB
SysMovieCategoryServiceImpl.java 1KB
SysMovieRuntimeServiceImpl.java 1KB
SysActorServiceImpl.java 1KB
SysHallCategoryServiceImpl.java 1KB
SysCinemaBrandServiceImpl.java 1KB
SysCinemaAreaServiceImpl.java 1KB
SysHallServiceImpl.java 1KB
SysUserHobbyServiceImpl.java 1KB
SysMovieCommentMapper.java 1KB
SysActorRoleServiceImpl.java 1KB
SysMovieAreaServiceImpl.java 1KB
ServletUtil.java 1KB
SysMovieAgeServiceImpl.java 1KB
SysMovieRuntime.java 1KB
SysSessionMapper.java 1KB
SysBill.java 1KB
MimeTypeUtils.java 1KB
SysMovieToCategoryServiceImpl.java 1KB
SysMovieCategoryMapper.java 1020B
共 429 条
- 1
- 2
- 3
- 4
- 5
资源评论
飞翔的佩奇
- 粉丝: 3556
- 资源: 799
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功