diff --git a/bonus-modules/bonus-oss/pom.xml b/bonus-modules/bonus-oss/pom.xml index 6c24002..2bf6c58 100644 --- a/bonus-modules/bonus-oss/pom.xml +++ b/bonus-modules/bonus-oss/pom.xml @@ -51,19 +51,6 @@ fastdfs-client - - - io.minio - minio - ${minio.version} - - - - - com.bonus - bonus-api-system - - com.bonus @@ -75,13 +62,19 @@ aliyun-sdk-oss 3.10.2 + - com.mchange - mchange-commons-java - 0.2.15 - compile + com.bonus + bonus-common-core + + org.projectlombok + lombok + provided + + + diff --git a/bonus-modules/bonus-oss/src/main/java/com/bonus/oss/controller/OssController.java b/bonus-modules/bonus-oss/src/main/java/com/bonus/oss/controller/OssController.java index 4e38980..7a7e552 100644 --- a/bonus-modules/bonus-oss/src/main/java/com/bonus/oss/controller/OssController.java +++ b/bonus-modules/bonus-oss/src/main/java/com/bonus/oss/controller/OssController.java @@ -2,11 +2,10 @@ package com.bonus.oss.controller; import com.aliyun.oss.model.OSSObject; import com.bonus.common.core.domain.R; +import com.bonus.common.core.utils.file.FileUtils; import com.bonus.oss.domain.OssInfo; import com.bonus.oss.service.OssService; -import com.bonus.oss.utils.FileUtils; import org.apache.poi.ss.formula.functions.T; -import org.springframework.core.io.InputStreamResource; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -21,7 +20,6 @@ import java.io.InputStream; import java.io.OutputStream; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; -import java.util.ArrayList; import java.util.List; @RestController @@ -37,19 +35,20 @@ public class OssController { * @return 文件信息 */ @PostMapping("/upload") - public R upload(@RequestParam("file") MultipartFile file) { + public R upload(MultipartFile file) { return ossService.upload(file); } + /** - * 多文件上传 + * 文件上传 * - * @param files 文件流数组 - * @return 上传结果 + * @param files 文件流 + * @return 文件信息 */ - @PostMapping("/uploadMultiple") - public R> uploadMultiple(@RequestParam("files") MultipartFile[] files) { - return ossService.uploadMultiple(files); + @PostMapping("/uploadFiles") + public R> uploadFiles(MultipartFile[] files) { + return ossService.uploadFiles(files); } /** @@ -97,39 +96,4 @@ public class OssController { public R delete(@RequestParam String ossFilePath) { return ossService.delete(ossFilePath); } - - /** - * 多文件删除 - * - * @param ossFilePaths 文件路径列表 - * @return 删除结果 - */ - @PostMapping("/deleteMultiple") - public R deleteMultiple(@RequestParam List ossFilePaths) { - return ossService.deleteMultiple(ossFilePaths); - } - - /** - * 文件复制 - * - * @param source 原oss文件存储地址 - * @param path 目标oss文件存储地址 - * @return 复制结果 - */ - @PostMapping("/copy") - public R copy(@RequestParam String source, @RequestParam String path) { - return ossService.copy(source, path); - } - - /** - * 多文件复制 - * - * @param sources 原oss文件存储地址列表 - * @param paths 目标oss文件存储地址列表 - * @return 复制结果 - */ - @PostMapping("/copyMultiple") - public R copyMultiple(@RequestParam List sources, @RequestParam List paths) { - return ossService.copyMultiple(sources, paths); - } } diff --git a/bonus-modules/bonus-oss/src/main/java/com/bonus/oss/domain/OssInfo.java b/bonus-modules/bonus-oss/src/main/java/com/bonus/oss/domain/OssInfo.java index c3f9511..e91c430 100644 --- a/bonus-modules/bonus-oss/src/main/java/com/bonus/oss/domain/OssInfo.java +++ b/bonus-modules/bonus-oss/src/main/java/com/bonus/oss/domain/OssInfo.java @@ -1,72 +1,44 @@ package com.bonus.oss.domain; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; /** - * @author 陈敏 - * @version Info.java, v 1.1 2021/11/15 10:16 chenmin Exp $ - * Created on 2021/11/15 + * OssInfo类用于封装OSS(Object Storage Service)对象的相关信息。 + * 通过此类,可以方便地管理和访问OSS对象的元数据,如名称、路径、大小等。 */ - +@Builder +@Data public class OssInfo { /** - * 名称 + * 文件或对象的名称。 + * 用于唯一标识OSS中的一个对象。 */ private String name; + /** - * oss里的路径存储路径 + * 文件在OSS中的存储路径。 + * 该路径不包含Bucket名称,仅指对象在Bucket内的相对路径。 */ private String path; + /** - * 对象大小 + * 文件或对象的大小。 + * 以字符串形式表示,单位可能为字节、KB、MB等。 */ private String length; + /** - * 文件类型 + * 文件的类型。 + * 可以是文件的MIME类型,或者根据文件扩展名推测的类型。 */ private String fileType; + /** - * Bucket名称 - **/ + * 存储文件的Bucket名称。 + * Bucket是OSS中用于存储对象的容器,每个对象必须属于某个Bucket。 + */ private String bucketName; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getPath() { - return path; - } - - public void setPath(String path) { - this.path = path; - } - - public String getLength() { - return length; - } - - public void setLength(String length) { - this.length = length; - } - - - public String getFileType() { - return fileType; - } - - public void setFileType(String fileType) { - this.fileType = fileType; - } - - public String getBucketName() { - return bucketName; - } - - public void setBucketName(String bucketName) { - this.bucketName = bucketName; - } } diff --git a/bonus-modules/bonus-oss/src/main/java/com/bonus/oss/service/OssService.java b/bonus-modules/bonus-oss/src/main/java/com/bonus/oss/service/OssService.java index 8bd1e93..98ae794 100644 --- a/bonus-modules/bonus-oss/src/main/java/com/bonus/oss/service/OssService.java +++ b/bonus-modules/bonus-oss/src/main/java/com/bonus/oss/service/OssService.java @@ -33,39 +33,11 @@ public interface OssService { * @return 操作结果 */ R delete(String ossFilePath); - - /** - * 文件复制 - * - * @param source 原oss文件存储地址 - * @param path 目标oss文件存储地址 - * @return 操作结果 - */ - R copy(String source, String path); - /** * 多文件上传 * - * @param files 文件流数组 - * @return 上传结果 + * @param files 文件流 + * @return 文件信息 */ - R> uploadMultiple(MultipartFile[] files); - - - /** - * 多文件删除 - * - * @param ossFilePaths oss文件存储地址列表 - * @return 删除结果 - */ - R deleteMultiple(List ossFilePaths); - - /** - * 多文件复制 - * - * @param sources 源oss文件存储地址列表 - * @param paths 目标oss文件存储地址列表 - * @return 复制结果 - */ - R copyMultiple(List sources, List paths); + R> uploadFiles(MultipartFile[] files); } diff --git a/bonus-modules/bonus-oss/src/main/java/com/bonus/oss/service/impl/OssServiceImpl.java b/bonus-modules/bonus-oss/src/main/java/com/bonus/oss/service/impl/OssServiceImpl.java index ade0570..b529f4e 100644 --- a/bonus-modules/bonus-oss/src/main/java/com/bonus/oss/service/impl/OssServiceImpl.java +++ b/bonus-modules/bonus-oss/src/main/java/com/bonus/oss/service/impl/OssServiceImpl.java @@ -2,9 +2,9 @@ package com.bonus.oss.service.impl; import com.aliyun.oss.model.OSSObject; import com.bonus.common.core.domain.R; +import com.bonus.common.core.utils.file.FileUtils; import com.bonus.oss.domain.OssInfo; import com.bonus.oss.service.OssService; -import com.bonus.oss.utils.FileUtils; import com.bonus.oss.utils.OssUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.poi.ss.formula.functions.T; @@ -12,6 +12,7 @@ import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import java.io.File; import java.util.ArrayList; import java.util.List; @@ -24,16 +25,16 @@ public class OssServiceImpl implements OssService { /** * 文件上传 * - * @param file 文件流 + * @param multipartFile 文件流 * @return 文件信息 */ @Override - public R upload(MultipartFile file) { + public R upload(MultipartFile multipartFile) { try { - if (!FileUtils.isValidFile(file)) { - return R.fail("File is empty or File size exceeds 5GB!"); - } - return ossUtils.upload(file); + String objectKey = multipartFile.getOriginalFilename(); + File file = FileUtils.multipartFileToFile(multipartFile); + objectKey = FileUtils.generateObjectName(objectKey); + return ossUtils.upload(objectKey, file); } catch (Exception e) { return R.fail("File upload failed."); } @@ -67,71 +68,25 @@ public class OssServiceImpl implements OssService { } } - /** - * 文件复制 - * - * @param source 原oss文件存储地址target - * @param path 目标oss文件存储地址 - */ - @Override - public R copy(String source, String path) { - return ossUtils.copy(source, path); - } - /** * 多文件上传 * - * @param files 文件流数组 - * @return 上传结果 + * @param files 文件流 + * @return 文件信息 */ @Override - public R> uploadMultiple(MultipartFile[] files) { - List uploadedFilesInfo = new ArrayList<>(); - for (MultipartFile file : files) { - R result = upload(file); - if (R.isError(result)) { - return R.fail("部分文件上传失败"); + public R> uploadFiles(MultipartFile[] files) { + try { + List ossInfos = new ArrayList<>(); + for (MultipartFile multipartFile : files) { + String objectKey = multipartFile.getOriginalFilename(); + File file = FileUtils.multipartFileToFile(multipartFile); + objectKey = FileUtils.generateObjectName(objectKey); + ossInfos.add(ossUtils.upload(objectKey, file).getData()); } - uploadedFilesInfo.add(result.getData()); + return R.ok(ossInfos); + } catch (Exception e) { + return R.fail("File upload failed."); } - return R.ok(uploadedFilesInfo); - } - - /** - * 多文件删除 - * - * @param ossFilePaths oss文件存储地址列表 - * @return 删除结果 - */ - @Override - public R deleteMultiple(List ossFilePaths) { - for (String path : ossFilePaths) { - R result = delete(path); - if (R.isError(result)) { - return R.fail("部分文件删除失败"); - } - } - return R.ok(); - } - - /** - * 多文件复制 - * - * @param sources 源oss文件存储地址列表 - * @param paths 目标oss文件存储地址列表 - * @return 复制结果 - */ - @Override - public R copyMultiple(List sources, List paths) { - if (sources.size() != paths.size()) { - return R.fail("源文件和目标文件数量不匹配"); - } - for (int i = 0; i < sources.size(); i++) { - R result = copy(sources.get(i), paths.get(i)); - if (R.isError(result)) { - return R.fail("部分文件复制失败"); - } - } - return R.ok(); } } diff --git a/bonus-modules/bonus-oss/src/main/java/com/bonus/oss/utils/OssUtils.java b/bonus-modules/bonus-oss/src/main/java/com/bonus/oss/utils/OssUtils.java index 52550b7..7ca629d 100644 --- a/bonus-modules/bonus-oss/src/main/java/com/bonus/oss/utils/OssUtils.java +++ b/bonus-modules/bonus-oss/src/main/java/com/bonus/oss/utils/OssUtils.java @@ -47,21 +47,15 @@ public class OssUtils { /** * 上传文件 * - * @param param MultipartFile对象 + * @param file File * @return 包含上传文件信息的R对象 */ - public R upload(MultipartFile param) { - // 获取上传文件的原始文件名 - String originalFilename = param.getOriginalFilename(); - // 将MultipartFile转换为File - File file = FileUtils.multipartFileToFile(param); + public R upload(String objectKey, File file) { try { - // 生成唯一的对象名 - String objectName = FileUtils.generateObjectName(originalFilename); // 上传文件到OSS - ossClient.putObject(ossConfig.getBucket(), objectName, file); + ossClient.putObject(ossConfig.getBucket(), objectKey, file); // 获取上传文件的信息并返回 - return R.ok(getInfo(originalFilename, objectName)); + return R.ok(getInfo(objectKey)); } catch (Exception e) { LOGGER.error("文件上传失败", e); return R.fail("文件上传失败"); @@ -76,21 +70,18 @@ public class OssUtils { /** * 获取文件信息 * - * @param filename 文件名 * @param ossFilePath 文件路径 * @return 包含文件信息的OssInfo对象 */ - public OssInfo getInfo(String filename, String ossFilePath) { + public OssInfo getInfo(String ossFilePath) { try { // 获取文件的元数据 ObjectMetadata objectMetadata = ossClient.getObjectMetadata(ossConfig.getBucket(), ossFilePath); - OssInfo ossInfo = new OssInfo(); - // 设置文件信息 - ossInfo.setLength(Convert.toStr(objectMetadata.getContentLength())); - ossInfo.setFileType(objectMetadata.getContentType()); - ossInfo.setName(filename); - ossInfo.setBucketName(ossConfig.getBucket()); - ossInfo.setPath(ossFilePath); + OssInfo ossInfo = OssInfo.builder() + .bucketName(ossConfig.getBucket()) + .fileType(objectMetadata.getContentType()) + .length(Convert.toStr(objectMetadata.getContentLength())) + .path(ossFilePath).build(); return ossInfo; } catch (Exception e) { LOGGER.error("获取文件信息失败", e);