From 1e8ccfec6ebcf7787def13165d9932b0cccefc49 Mon Sep 17 00:00:00 2001 From: liding <756868258@qq.com> Date: 星期五, 20 六月 2025 14:34:45 +0800 Subject: [PATCH] 1.文件上传格式调整 2.表格调整 --- ruoyi-common/src/main/java/com/ruoyi/basic/service/impl/StorageBlobServiceImpl.java | 78 ++++++++++++++++++++++++++++++++------- 1 files changed, 64 insertions(+), 14 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/basic/service/impl/StorageBlobServiceImpl.java b/ruoyi-common/src/main/java/com/ruoyi/basic/service/impl/StorageBlobServiceImpl.java index 1c51d86..cf2094e 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/basic/service/impl/StorageBlobServiceImpl.java +++ b/ruoyi-common/src/main/java/com/ruoyi/basic/service/impl/StorageBlobServiceImpl.java @@ -10,16 +10,19 @@ import com.ruoyi.basic.mapper.StorageBlobMapper; import com.ruoyi.basic.service.StorageBlobService; import com.ruoyi.common.core.domain.MinioResult; +import com.ruoyi.common.exception.base.BaseException; import com.ruoyi.common.exception.file.InvalidExtensionException; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.file.MinioUtils; import com.ruoyi.common.utils.uuid.IdUtils; import lombok.RequiredArgsConstructor; +import org.apache.commons.io.FilenameUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -53,29 +56,76 @@ List<StorageBlobDTO> storageBlobDTOs = new ArrayList<>(); for (MultipartFile file : files) { try { + validateFileExtension(file); + MinioResult res = minioUtils.upload(bucketName, file, false); - StorageBlobDTO dto = new StorageBlobDTO(); - dto.setContentType(file.getContentType()); - dto.setBucketFilename(res.getBucketFileName()); - dto.setOriginalFilename(res.getOriginalName()); - dto.setByteSize(file.getSize()); - dto.setKey(IdUtils.simpleUUID()); - dto.setBucketName(bucketName); - dto.setUrl(minioUtils.getPreviewUrl(res.getBucketFileName(), bucketName, false)); - dto.setDownloadUrl(minioUtils.getDownloadUrl(res.getBucketFileName(), bucketName)); - if (type != null){ - dto.setType(type); - } - // 鎻掑叆鏁版嵁搴� + + StorageBlobDTO dto = buildStorageBlobDTO(file, res, bucketName, type); + storageBlobMapper.insert(dto); storageBlobDTOs.add(dto); + } catch (InvalidExtensionException e) { - throw new RuntimeException("minio鏂囦欢涓婁紶寮傚父锛�" + e); + throw new RuntimeException("涓嶆敮鎸佺殑鏂囦欢绫诲瀷锛�" + file.getOriginalFilename(), e); + } catch (Exception e) { + throw new RuntimeException("涓婁紶鏂囦欢澶辫触锛�" + file.getOriginalFilename(), e); } } return storageBlobDTOs; } + private void validateFileExtension(MultipartFile file) throws InvalidExtensionException { + String filename = file.getOriginalFilename(); + String extension = FilenameUtils.getExtension(filename).toLowerCase(); + List<String> allowedExtensions = Arrays.asList( + // 鍥剧墖 + "jpg", "jpeg", "png", "gif", "bmp", "webp", "tiff", "ico", "svg", + + // 鏂囨。 + "pdf", "doc", "docx", "xls", "xlsx", "ppt", "pptx", "txt", "rtf", "md", "csv", "odt", + + // 瑙嗛 + "mp4", "mov", "avi", "wmv", "flv", "mkv", "webm", "mpeg", "3gp","MOV", + + // 闊抽 + "mp3", "wav", "ogg", "aac", "flac", "m4a", "wma", "amr", + + // 鍘嬬缉鍖� + "zip", "rar", "7z", "tar", "gz", "bz2", "xz", + + // 缂栫▼浠g爜鏂囦欢 + "java", "py", "js", "ts", "html", "css", "cpp", "c", "cs", "json", "xml", "sql", "yaml", "yml", "sh", "bat", + + // 瀹夎绋嬪簭 & 浜岃繘鍒� + "exe", "apk", "dmg", "msi", "bin", "iso", + + // 璁捐绫� + "psd", "ai", "xd", "sketch", "fig" + ); + + if (!allowedExtensions.contains(extension)) { + throw new BaseException("鏂囦欢绫诲瀷涓嶈鍏佽锛�" + extension); + } + } + + private StorageBlobDTO buildStorageBlobDTO(MultipartFile file, MinioResult res, String bucketName, Long type) { + StorageBlobDTO dto = new StorageBlobDTO(); + dto.setContentType(file.getContentType()); + dto.setBucketFilename(res.getBucketFileName()); + dto.setOriginalFilename(res.getOriginalName()); + dto.setByteSize(file.getSize()); + dto.setKey(IdUtils.simpleUUID()); + dto.setBucketName(bucketName); + dto.setUrl(minioUtils.getPreviewUrl(res.getBucketFileName(), bucketName, false)); + dto.setDownloadUrl(minioUtils.getDownloadUrl(res.getBucketFileName(), bucketName)); + + if (type != null) { + dto.setType(type); + } + + return dto; + } + @Override public int deleteStorageBlobs(StorageAttachment attachment) { List<StorageAttachment> attachments = storageAttachmentMapper.selectList(new LambdaQueryWrapper<StorageAttachment>() -- Gitblit v1.9.3