Commit 33a31cfb0fae16317c043761ea7c7e26312806e5
1 parent
b0d635e1
优化文件的 type 识别与存储
Showing
8 changed files
with
15 additions
and
25 deletions
README.md
| @@ -42,7 +42,7 @@ | @@ -42,7 +42,7 @@ | ||
| 42 | 文档地址:<http://www.iocoder.cn/categories/Yudao/> | 42 | 文档地址:<http://www.iocoder.cn/categories/Yudao/> |
| 43 | * [《如何搭建环境》](http://www.iocoder.cn/categories/Yudao/?yudao) | 43 | * [《如何搭建环境》](http://www.iocoder.cn/categories/Yudao/?yudao) |
| 44 | 44 | ||
| 45 | -> 未来会补充文档和视频,方便胖友冲冲冲! | 45 | +视频教程:<https://doc.iocoder.cn/video/> |
| 46 | 46 | ||
| 47 | ## 🐼 内置功能 | 47 | ## 🐼 内置功能 |
| 48 | 48 |
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/io/FileUtils.java
| @@ -64,19 +64,21 @@ public class FileUtils { | @@ -64,19 +64,21 @@ public class FileUtils { | ||
| 64 | } | 64 | } |
| 65 | 65 | ||
| 66 | /** | 66 | /** |
| 67 | + * 生成文件路径 | ||
| 68 | + * | ||
| 67 | * @param content 文件内容 | 69 | * @param content 文件内容 |
| 68 | * @param originalName 原始文件名 | 70 | * @param originalName 原始文件名 |
| 69 | * @return path,唯一不可重复 | 71 | * @return path,唯一不可重复 |
| 70 | */ | 72 | */ |
| 71 | public static String generatePath(byte[] content, String originalName) { | 73 | public static String generatePath(byte[] content, String originalName) { |
| 72 | String sha256Hex = DigestUtil.sha256Hex(content); | 74 | String sha256Hex = DigestUtil.sha256Hex(content); |
| 73 | - // 如果存在name,则优先使用name的后缀 | 75 | + // 情况一:如果存在 name,则优先使用 name 的后缀 |
| 74 | if (StrUtil.isNotBlank(originalName)) { | 76 | if (StrUtil.isNotBlank(originalName)) { |
| 75 | String extName = FileNameUtil.extName(originalName); | 77 | String extName = FileNameUtil.extName(originalName); |
| 76 | return StrUtil.isBlank(extName) ? sha256Hex : sha256Hex + "." + extName; | 78 | return StrUtil.isBlank(extName) ? sha256Hex : sha256Hex + "." + extName; |
| 77 | - } else { | ||
| 78 | - return sha256Hex + '.' + FileTypeUtil.getType(new ByteArrayInputStream(content)); | ||
| 79 | } | 79 | } |
| 80 | + // 情况二:基于 content 计算 | ||
| 81 | + return sha256Hex + '.' + FileTypeUtil.getType(new ByteArrayInputStream(content)); | ||
| 80 | } | 82 | } |
| 81 | 83 | ||
| 82 | } | 84 | } |
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/file/FileDO.java
| @@ -5,8 +5,6 @@ import com.baomidou.mybatisplus.annotation.KeySequence; | @@ -5,8 +5,6 @@ import com.baomidou.mybatisplus.annotation.KeySequence; | ||
| 5 | import com.baomidou.mybatisplus.annotation.TableName; | 5 | import com.baomidou.mybatisplus.annotation.TableName; |
| 6 | import lombok.*; | 6 | import lombok.*; |
| 7 | 7 | ||
| 8 | -import java.io.InputStream; | ||
| 9 | - | ||
| 10 | /** | 8 | /** |
| 11 | * 文件表 | 9 | * 文件表 |
| 12 | * 每次文件上传,都会记录一条记录到该表中 | 10 | * 每次文件上传,都会记录一条记录到该表中 |
| @@ -46,7 +44,7 @@ public class FileDO extends BaseDO { | @@ -46,7 +44,7 @@ public class FileDO extends BaseDO { | ||
| 46 | */ | 44 | */ |
| 47 | private String url; | 45 | private String url; |
| 48 | /** | 46 | /** |
| 49 | - * 文件的MIME类型,例如"application/octet-stream" | 47 | + * 文件的 MIME 类型,例如 "application/octet-stream" |
| 50 | */ | 48 | */ |
| 51 | private String type; | 49 | private String type; |
| 52 | /** | 50 | /** |
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImpl.java
| 1 | package cn.iocoder.yudao.module.infra.service.file; | 1 | package cn.iocoder.yudao.module.infra.service.file; |
| 2 | 2 | ||
| 3 | -import cn.hutool.core.io.FileUtil; | ||
| 4 | import cn.hutool.core.lang.Assert; | 3 | import cn.hutool.core.lang.Assert; |
| 5 | import cn.hutool.core.util.StrUtil; | 4 | import cn.hutool.core.util.StrUtil; |
| 6 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSmsLoginReqVO.java
| 1 | package cn.iocoder.yudao.module.system.controller.admin.auth.vo; | 1 | package cn.iocoder.yudao.module.system.controller.admin.auth.vo; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.yudao.framework.common.validation.Mobile; | ||
| 3 | import io.swagger.annotations.ApiModel; | 4 | import io.swagger.annotations.ApiModel; |
| 4 | import io.swagger.annotations.ApiModelProperty; | 5 | import io.swagger.annotations.ApiModelProperty; |
| 5 | import lombok.AllArgsConstructor; | 6 | import lombok.AllArgsConstructor; |
| 6 | import lombok.Builder; | 7 | import lombok.Builder; |
| 7 | import lombok.Data; | 8 | import lombok.Data; |
| 8 | import lombok.NoArgsConstructor; | 9 | import lombok.NoArgsConstructor; |
| 9 | -import org.hibernate.validator.constraints.Length; | ||
| 10 | 10 | ||
| 11 | import javax.validation.constraints.NotEmpty; | 11 | import javax.validation.constraints.NotEmpty; |
| 12 | -import javax.validation.constraints.Pattern; | ||
| 13 | 12 | ||
| 14 | -@ApiModel("管理后台 - 短信验证码的呢老姑 Request VO") | 13 | +@ApiModel("管理后台 - 短信验证码的登录 Request VO") |
| 15 | @Data | 14 | @Data |
| 16 | @NoArgsConstructor | 15 | @NoArgsConstructor |
| 17 | @AllArgsConstructor | 16 | @AllArgsConstructor |
| @@ -20,19 +19,11 @@ public class AuthSmsLoginReqVO { | @@ -20,19 +19,11 @@ public class AuthSmsLoginReqVO { | ||
| 20 | 19 | ||
| 21 | @ApiModelProperty(value = "手机号", required = true, example = "yudaoyuanma") | 20 | @ApiModelProperty(value = "手机号", required = true, example = "yudaoyuanma") |
| 22 | @NotEmpty(message = "手机号不能为空") | 21 | @NotEmpty(message = "手机号不能为空") |
| 23 | - @Length(min = 11, max = 11, message = "手机号格式错误,仅支持大陆手机号") | ||
| 24 | - @Pattern(regexp = "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$", message = "账号格式为数字以及字母") | 22 | + @Mobile |
| 25 | private String mobile; | 23 | private String mobile; |
| 26 | 24 | ||
| 27 | - | ||
| 28 | - | ||
| 29 | - @ApiModelProperty(value = "短信验证码", required = true, example = "1024", notes = "验证码开启时,需要传递") | ||
| 30 | - @NotEmpty(message = "验证码不能为空", groups = CodeEnableGroup.class) | 25 | + @ApiModelProperty(value = "短信验证码", required = true, example = "1024") |
| 26 | + @NotEmpty(message = "验证码不能为空") | ||
| 31 | private String code; | 27 | private String code; |
| 32 | 28 | ||
| 33 | - /** | ||
| 34 | - * 开启验证码的 Group | ||
| 35 | - */ | ||
| 36 | - public interface CodeEnableGroup {} | ||
| 37 | - | ||
| 38 | } | 29 | } |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java
| @@ -52,7 +52,7 @@ public class AdminUserDO extends TenantBaseDO { | @@ -52,7 +52,7 @@ public class AdminUserDO extends TenantBaseDO { | ||
| 52 | */ | 52 | */ |
| 53 | private String remark; | 53 | private String remark; |
| 54 | /** | 54 | /** |
| 55 | - * 部门ID | 55 | + * 部门 ID |
| 56 | */ | 56 | */ |
| 57 | private Long deptId; | 57 | private Long deptId; |
| 58 | /** | 58 | /** |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java
| @@ -123,7 +123,7 @@ public class AdminAuthServiceImpl implements AdminAuthService { | @@ -123,7 +123,7 @@ public class AdminAuthServiceImpl implements AdminAuthService { | ||
| 123 | throw exception(USER_NOT_EXISTS); | 123 | throw exception(USER_NOT_EXISTS); |
| 124 | } | 124 | } |
| 125 | 125 | ||
| 126 | - // 缓存登陆用户到 Redis 中,返回 sessionId 编号 | 126 | + // 创建 Token 令牌,记录登录日志 |
| 127 | return createTokenAfterLoginSuccess(user.getId(), reqVO.getMobile(), LoginLogTypeEnum.LOGIN_MOBILE); | 127 | return createTokenAfterLoginSuccess(user.getId(), reqVO.getMobile(), LoginLogTypeEnum.LOGIN_MOBILE); |
| 128 | } | 128 | } |
| 129 | 129 |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java
| @@ -87,7 +87,7 @@ public class AdminUserServiceImpl implements AdminUserService { | @@ -87,7 +87,7 @@ public class AdminUserServiceImpl implements AdminUserService { | ||
| 87 | // 插入用户 | 87 | // 插入用户 |
| 88 | AdminUserDO user = UserConvert.INSTANCE.convert(reqVO); | 88 | AdminUserDO user = UserConvert.INSTANCE.convert(reqVO); |
| 89 | user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启 | 89 | user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启 |
| 90 | - user.setPassword(passwordEncoder.encode(reqVO.getPassword())); // 加密密码 | 90 | + user.setPassword(encodePassword(reqVO.getPassword())); // 加密密码 |
| 91 | userMapper.insert(user); | 91 | userMapper.insert(user); |
| 92 | // 插入关联岗位 | 92 | // 插入关联岗位 |
| 93 | if (CollectionUtil.isNotEmpty(user.getPostIds())) { | 93 | if (CollectionUtil.isNotEmpty(user.getPostIds())) { |