mirror of
https://github.com/PlayEdu/PlayEdu
synced 2025-12-24 11:49:51 +08:00
优化头像上传
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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{
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user