feat: user related logic refactor
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
package xin.merlin.myplayerbackend.service;
|
||||
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.nio.file.StandardCopyOption;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class UploadService {
|
||||
|
||||
@Value("${resources.user.avatar}")
|
||||
private String userAvatarDir;
|
||||
|
||||
@Value("${resources.group.avatar}")
|
||||
private String groupAvatarDir;
|
||||
|
||||
@Value("${resources.playroom.avatar}")
|
||||
private String playroomAvatarDir;
|
||||
|
||||
@Value("${resources.public}")
|
||||
private String publicAvatarDir;
|
||||
|
||||
private static final List<String> AVATAR_ALLOWED_EXTENSIONS = Arrays.asList(".jpg", ".jpeg", ".png", ".gif");
|
||||
|
||||
/**
|
||||
* 上传用户、群组、放映室头像
|
||||
* @param file 目标文件
|
||||
* @param type 上传类型
|
||||
* @param influence 受影响的id
|
||||
* @return host后的访问url
|
||||
* @throws IOException 抛出io异常
|
||||
*/
|
||||
public String uploadAvatar(MultipartFile file, Integer type,Integer influence) throws IOException {
|
||||
String DIR = switch (type) {
|
||||
case 1 -> userAvatarDir;
|
||||
case 2 -> groupAvatarDir;
|
||||
case 3 -> playroomAvatarDir;
|
||||
default -> publicAvatarDir;
|
||||
};
|
||||
String fileName = getFilename(file, influence, DIR);
|
||||
Path targetPath = Paths.get(DIR, fileName);
|
||||
Files.copy(file.getInputStream(), targetPath, StandardCopyOption.REPLACE_EXISTING);
|
||||
|
||||
return "/resources/user/avatar/" + fileName; // 返回访问 URL
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param file 目标文件
|
||||
* @param influence 受影响的id
|
||||
* @param DIR 储存的位置
|
||||
* @return fileName 文件在储存之后的名字
|
||||
* @throws IOException 抛出io异常
|
||||
*/
|
||||
private static String getFilename(MultipartFile file, Integer influence, String DIR) throws IOException {
|
||||
File dir = new File(DIR);
|
||||
if (!dir.exists()) dir.mkdirs();
|
||||
|
||||
// 取文件扩展名并检查是否合法
|
||||
String originalFileName = file.getOriginalFilename();
|
||||
String fileExtension = "";
|
||||
if (originalFileName != null && originalFileName.contains(".")) {
|
||||
fileExtension = originalFileName.substring(originalFileName.lastIndexOf(".")).toLowerCase();
|
||||
}
|
||||
|
||||
if (!AVATAR_ALLOWED_EXTENSIONS.contains(fileExtension)) {
|
||||
throw new IOException("仅支持 JPG, PNG, GIF 格式");
|
||||
}
|
||||
|
||||
// 以id进行命名,方便直接替换
|
||||
return influence.toString() + fileExtension;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user