From d040f3c80716cf22a932b5c2b353a4d8e817f95e Mon Sep 17 00:00:00 2001 From: xsx <825657193@qq.com> Date: Tue, 2 Sep 2025 15:22:55 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=96=87=E4=BB=B6=E5=90=8C=E6=97=B6?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E5=8F=AF=E8=83=BD=E9=87=8D=E5=90=8D=E7=9A=84?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../implatform/thirdparty/MinioService.java | 43 ++++++++----------- .../java/com/bx/implatform/util/FileUtil.java | 10 +++++ 2 files changed, 28 insertions(+), 25 deletions(-) diff --git a/im-platform/src/main/java/com/bx/implatform/thirdparty/MinioService.java b/im-platform/src/main/java/com/bx/implatform/thirdparty/MinioService.java index 254a8e2..d8184ea 100644 --- a/im-platform/src/main/java/com/bx/implatform/thirdparty/MinioService.java +++ b/im-platform/src/main/java/com/bx/implatform/thirdparty/MinioService.java @@ -1,6 +1,8 @@ package com.bx.implatform.thirdparty; +import cn.hutool.core.util.RandomUtil; import com.bx.implatform.util.DateTimeUtils; +import com.bx.implatform.util.FileUtil; import io.minio.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -38,9 +40,7 @@ public class MinioService { */ public void makeBucket(String bucketName) { try { - minioClient.makeBucket(MakeBucketArgs.builder() - .bucket(bucketName) - .build()); + minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); } catch (Exception e) { log.error("创建bucket失败,", e); } @@ -52,18 +52,9 @@ public class MinioService { public void setBucketPublic(String bucketName) { try { // 设置公开 - String sb = "{\"Version\":\"2012-10-17\"," + - "\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":" + - "{\"AWS\":[\"*\"]},\"Action\":[\"s3:ListBucket\",\"s3:ListBucketMultipartUploads\"," + - "\"s3:GetBucketLocation\"],\"Resource\":[\"arn:aws:s3:::" + bucketName + - "\"]},{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:PutObject\",\"s3:AbortMultipartUpload\",\"s3:DeleteObject\",\"s3:GetObject\",\"s3:ListMultipartUploadParts\"],\"Resource\":[\"arn:aws:s3:::" + - bucketName + - "/*\"]}]}"; - minioClient.setBucketPolicy( - SetBucketPolicyArgs.builder() - .bucket(bucketName) - .config(sb) - .build()); + String sb = + "{\"Version\":\"2012-10-17\"," + "\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":" + "{\"AWS\":[\"*\"]},\"Action\":[\"s3:ListBucket\",\"s3:ListBucketMultipartUploads\"," + "\"s3:GetBucketLocation\"],\"Resource\":[\"arn:aws:s3:::" + bucketName + "\"]},{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:PutObject\",\"s3:AbortMultipartUpload\",\"s3:DeleteObject\",\"s3:GetObject\",\"s3:ListMultipartUploadParts\"],\"Resource\":[\"arn:aws:s3:::" + bucketName + "/*\"]}]}"; + minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(bucketName).config(sb).build()); } catch (Exception e) { log.error("创建bucket失败,", e); } @@ -82,10 +73,10 @@ public class MinioService { if (StringUtils.isBlank(originalFilename)) { throw new RuntimeException(); } - String fileName = System.currentTimeMillis() + ""; - if (originalFilename.lastIndexOf(".") >= 0) { - fileName += originalFilename.substring(originalFilename.lastIndexOf(".")); - } + // 加入随机数,防止文件重名 + String fileName = FileUtil.excludeExtension(originalFilename); + fileName += "_" + RandomUtil.randomString(4); + fileName += "." + FileUtil.getFileExtension(originalFilename); String objectName = DateTimeUtils.getFormatDate(new Date(), DateTimeUtils.PARTDATEFORMAT) + "/" + fileName; try { InputStream stream = new ByteArrayInputStream(file.getBytes()); @@ -111,13 +102,15 @@ public class MinioService { * @return objectName */ public String upload(String bucketName, String path, String name, byte[] fileByte, String contentType) { - - String fileName = System.currentTimeMillis() + name.substring(name.lastIndexOf(".")); + // 加入随机数,防止文件重名 + String fileName = FileUtil.excludeExtension(name); + fileName += "_" + RandomUtil.randomString(4); + fileName += "." + FileUtil.getFileExtension(name); String objectName = DateTimeUtils.getFormatDate(new Date(), DateTimeUtils.PARTDATEFORMAT) + "/" + fileName; try { InputStream stream = new ByteArrayInputStream(fileByte); PutObjectArgs objectArgs = PutObjectArgs.builder().bucket(bucketName).object(path + "/" + objectName) - .stream(stream, fileByte.length, -1).contentType(contentType).build(); + .stream(stream, fileByte.length, -1).contentType(contentType).build(); //文件名称相同会覆盖 minioClient.putObject(objectArgs); } catch (Exception e) { @@ -127,7 +120,6 @@ public class MinioService { return objectName; } - /** * 删除 * @@ -138,7 +130,8 @@ public class MinioService { */ public boolean remove(String bucketName, String path, String fileName) { try { - minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(path + "/" + fileName).build()); + minioClient.removeObject( + RemoveObjectArgs.builder().bucket(bucketName).object(path + "/" + fileName).build()); } catch (Exception e) { log.error("删除文件失败,", e); return false; @@ -156,7 +149,7 @@ public class MinioService { */ public Boolean isExist(String bucketName, String path, String fileName) { try { - minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(path + "/" + fileName).build()); + minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(path + "/" + fileName).build()); } catch (Exception e) { return false; } diff --git a/im-platform/src/main/java/com/bx/implatform/util/FileUtil.java b/im-platform/src/main/java/com/bx/implatform/util/FileUtil.java index 78d2ab6..89aeddd 100644 --- a/im-platform/src/main/java/com/bx/implatform/util/FileUtil.java +++ b/im-platform/src/main/java/com/bx/implatform/util/FileUtil.java @@ -13,6 +13,16 @@ public final class FileUtil { return fileName.substring(fileName.lastIndexOf(".") + 1); } + /** + * 去除文件扩展名 + * + * @param fileName 文件名 + * @return + */ + public static String excludeExtension(String fileName) { + return fileName.substring(0,fileName.lastIndexOf(".")); + } + /** * 判断文件是否图片类型 *