Browse Source

fix: 文件同时上传可能重名的bug

master
xsx 7 months ago
parent
commit
d040f3c807
  1. 43
      im-platform/src/main/java/com/bx/implatform/thirdparty/MinioService.java
  2. 10
      im-platform/src/main/java/com/bx/implatform/util/FileUtil.java

43
im-platform/src/main/java/com/bx/implatform/thirdparty/MinioService.java

@ -1,6 +1,8 @@
package com.bx.implatform.thirdparty; package com.bx.implatform.thirdparty;
import cn.hutool.core.util.RandomUtil;
import com.bx.implatform.util.DateTimeUtils; import com.bx.implatform.util.DateTimeUtils;
import com.bx.implatform.util.FileUtil;
import io.minio.*; import io.minio.*;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -38,9 +40,7 @@ public class MinioService {
*/ */
public void makeBucket(String bucketName) { public void makeBucket(String bucketName) {
try { try {
minioClient.makeBucket(MakeBucketArgs.builder() minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
.bucket(bucketName)
.build());
} catch (Exception e) { } catch (Exception e) {
log.error("创建bucket失败,", e); log.error("创建bucket失败,", e);
} }
@ -52,18 +52,9 @@ public class MinioService {
public void setBucketPublic(String bucketName) { public void setBucketPublic(String bucketName) {
try { try {
// 设置公开 // 设置公开
String sb = "{\"Version\":\"2012-10-17\"," + String sb =
"\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":" + "{\"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 + "/*\"]}]}";
"{\"AWS\":[\"*\"]},\"Action\":[\"s3:ListBucket\",\"s3:ListBucketMultipartUploads\"," + minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(bucketName).config(sb).build());
"\"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) { } catch (Exception e) {
log.error("创建bucket失败,", e); log.error("创建bucket失败,", e);
} }
@ -82,10 +73,10 @@ public class MinioService {
if (StringUtils.isBlank(originalFilename)) { if (StringUtils.isBlank(originalFilename)) {
throw new RuntimeException(); throw new RuntimeException();
} }
String fileName = System.currentTimeMillis() + ""; // 加入随机数,防止文件重名
if (originalFilename.lastIndexOf(".") >= 0) { String fileName = FileUtil.excludeExtension(originalFilename);
fileName += originalFilename.substring(originalFilename.lastIndexOf(".")); fileName += "_" + RandomUtil.randomString(4);
} fileName += "." + FileUtil.getFileExtension(originalFilename);
String objectName = DateTimeUtils.getFormatDate(new Date(), DateTimeUtils.PARTDATEFORMAT) + "/" + fileName; String objectName = DateTimeUtils.getFormatDate(new Date(), DateTimeUtils.PARTDATEFORMAT) + "/" + fileName;
try { try {
InputStream stream = new ByteArrayInputStream(file.getBytes()); InputStream stream = new ByteArrayInputStream(file.getBytes());
@ -111,13 +102,15 @@ public class MinioService {
* @return objectName * @return objectName
*/ */
public String upload(String bucketName, String path, String name, byte[] fileByte, String contentType) { 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; String objectName = DateTimeUtils.getFormatDate(new Date(), DateTimeUtils.PARTDATEFORMAT) + "/" + fileName;
try { try {
InputStream stream = new ByteArrayInputStream(fileByte); InputStream stream = new ByteArrayInputStream(fileByte);
PutObjectArgs objectArgs = PutObjectArgs.builder().bucket(bucketName).object(path + "/" + objectName) 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); minioClient.putObject(objectArgs);
} catch (Exception e) { } catch (Exception e) {
@ -127,7 +120,6 @@ public class MinioService {
return objectName; return objectName;
} }
/** /**
* 删除 * 删除
* *
@ -138,7 +130,8 @@ public class MinioService {
*/ */
public boolean remove(String bucketName, String path, String fileName) { public boolean remove(String bucketName, String path, String fileName) {
try { try {
minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(path + "/" + fileName).build()); minioClient.removeObject(
RemoveObjectArgs.builder().bucket(bucketName).object(path + "/" + fileName).build());
} catch (Exception e) { } catch (Exception e) {
log.error("删除文件失败,", e); log.error("删除文件失败,", e);
return false; return false;
@ -156,7 +149,7 @@ public class MinioService {
*/ */
public Boolean isExist(String bucketName, String path, String fileName) { public Boolean isExist(String bucketName, String path, String fileName) {
try { try {
minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(path + "/" + fileName).build()); minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(path + "/" + fileName).build());
} catch (Exception e) { } catch (Exception e) {
return false; return false;
} }

10
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); return fileName.substring(fileName.lastIndexOf(".") + 1);
} }
/**
* 去除文件扩展名
*
* @param fileName 文件名
* @return
*/
public static String excludeExtension(String fileName) {
return fileName.substring(0,fileName.lastIndexOf("."));
}
/** /**
* 判断文件是否图片类型 * 判断文件是否图片类型
* *

Loading…
Cancel
Save