优化头像上传

This commit is contained in:
none
2023-03-24 14:59:42 +08:00
parent 82ad3cc28a
commit 639f3065a2
12 changed files with 341 additions and 19 deletions

View File

@@ -1,18 +1,25 @@
package xyz.playedu.api.service.impl;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import xyz.playedu.api.constant.BackendConstant;
import xyz.playedu.api.constant.FrontendConstant;
import xyz.playedu.api.domain.Resource;
import xyz.playedu.api.domain.UserUploadImageLog;
import xyz.playedu.api.exception.ServiceException;
import xyz.playedu.api.service.MinioService;
import xyz.playedu.api.service.ResourceService;
import xyz.playedu.api.service.UploadService;
import xyz.playedu.api.service.UserUploadImageLogService;
import xyz.playedu.api.types.UploadFileInfo;
import xyz.playedu.api.util.Base64Util;
import xyz.playedu.api.util.HelperUtil;
import java.util.Date;
/**
* @Author 杭州白书科技有限公司
* @create 2023/3/8 14:02
@@ -27,34 +34,69 @@ public class UploadServiceImpl implements UploadService {
@Autowired
private MinioService minioService;
@Autowired
private UserUploadImageLogService userUploadImageLogService;
@Override
public Resource storeMinio(Integer adminId, MultipartFile file, String categoryIds) throws ServiceException {
@SneakyThrows
public UploadFileInfo upload(MultipartFile file, String dir) {
if (file == null || file.isEmpty() || file.getOriginalFilename() == null) {
throw new ServiceException("请上传文件");
}
// 文件后缀名校验
// 上传上来的文件名名
String filename = file.getOriginalFilename();
String ext = HelperUtil.fileExt(filename);
String type = BackendConstant.RESOURCE_EXT_2_TYPE.get(ext);
if (type == null) {
UploadFileInfo fileInfo = new UploadFileInfo();
// 文件大小
fileInfo.setSize(file.getSize());
// 解析扩展名
fileInfo.setExtension(HelperUtil.fileExt(filename));
// 解析扩展名称对应的系统资源类型
fileInfo.setResourceType(BackendConstant.RESOURCE_EXT_2_TYPE.get(fileInfo.getExtension()));
// 检测是否为系统不支持的资源类型
if (fileInfo.getResourceType() == null) {
throw new ServiceException("当前资源扩展不支持上传");
}
// 上传原文件的文件名
String oFilename = filename.replaceAll("." + ext, "");
fileInfo.setOriginalName(filename.replaceAll("." + fileInfo.getExtension(), ""));
// 自定义新的存储文件名
String newFilename = HelperUtil.randomString(32) + "." + ext;
String savePath = BackendConstant.RESOURCE_TYPE_2_DIR.get(type) + newFilename;
fileInfo.setSaveName(HelperUtil.randomString(32) + "." + fileInfo.getExtension());
// 生成保存的相对路径
if (dir == null || dir.length() == 0) {
dir = BackendConstant.RESOURCE_TYPE_2_DIR.get(fileInfo.getResourceType());
}
fileInfo.setSavePath(dir + fileInfo.getSaveName());
// 保存文件并生成访问url
String url = minioService.saveFile(file, fileInfo.getSavePath(), BackendConstant.RESOURCE_EXT_2_CONTENT_TYPE.get(fileInfo.getExtension()));
fileInfo.setUrl(url);
// 保存文件
String url = minioService.saveFile(file, savePath, BackendConstant.RESOURCE_EXT_2_CONTENT_TYPE.get(ext));
// 上传记录
return resourceService.create(adminId, categoryIds, type, oFilename, ext, file.getSize(), BackendConstant.STORAGE_DRIVER_MINIO, "", savePath, url);
return fileInfo;
}
@Override
public Resource storeBase64Image(Integer adminId, String content, String categoryIds) throws ServiceException {
@SneakyThrows
public Resource storeMinio(Integer adminId, MultipartFile file, String categoryIds) {
UploadFileInfo info = upload(file, null);
return resourceService.create(
adminId,
categoryIds,
info.getResourceType(),
info.getOriginalName(),
info.getExtension(),
file.getSize(),
BackendConstant.STORAGE_DRIVER_MINIO,
"",
info.getSavePath(),
info.getUrl()
);
}
@Override
@SneakyThrows
public Resource storeBase64Image(Integer adminId, String content, String categoryIds) {
// data:image/jpeg;base64,
String[] base64Rows = content.split(",");
// 解析出content-type
@@ -77,4 +119,21 @@ public class UploadServiceImpl implements UploadService {
// 上传记录
return resourceService.create(adminId, categoryIds, type, filename, ext, (long) binary.length, BackendConstant.STORAGE_DRIVER_MINIO, "", savePath, url);
}
@Override
@SneakyThrows
public UserUploadImageLog userAvatar(Integer userId, MultipartFile file, String typed, String scene) {
UploadFileInfo info = upload(file, FrontendConstant.DIR_AVATAR);
UserUploadImageLog log = new UserUploadImageLog();
log.setUserId(userId);
log.setTyped(typed);
log.setScene(scene);
log.setDriver(BackendConstant.STORAGE_DRIVER_MINIO);
log.setPath(info.getSavePath());
log.setUrl(info.getUrl());
log.setName(info.getOriginalName());
log.setCreatedAt(new Date());
userUploadImageLogService.save(log);
return log;
}
}

View File

@@ -204,6 +204,14 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
});
return result;
}
@Override
public void changeAvatar(Integer userId, String avatar) {
User user = new User();
user.setId(userId);
user.setAvatar(avatar);
updateById(user);
}
}

View File

@@ -0,0 +1,22 @@
package xyz.playedu.api.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import xyz.playedu.api.domain.UserUploadImageLog;
import xyz.playedu.api.service.UserUploadImageLogService;
import xyz.playedu.api.mapper.UserUploadImageLogMapper;
import org.springframework.stereotype.Service;
/**
* @author tengteng
* @description 针对表【user_upload_image_logs】的数据库操作Service实现
* @createDate 2023-03-24 14:32:48
*/
@Service
public class UserUploadImageLogServiceImpl extends ServiceImpl<UserUploadImageLogMapper, UserUploadImageLog>
implements UserUploadImageLogService{
}