|
@@ -14,6 +14,7 @@ import org.apache.http.client.methods.HttpPut;
|
|
|
import org.apache.http.entity.ByteArrayEntity;
|
|
|
import org.apache.http.impl.client.CloseableHttpClient;
|
|
|
import org.apache.http.impl.client.HttpClients;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
@@ -32,6 +33,9 @@ public class MinioUtil {
|
|
|
@Resource
|
|
|
private CustomMinioClient minioClient;
|
|
|
|
|
|
+ @Value("${minio.url}")
|
|
|
+ private String baseUrl;
|
|
|
+
|
|
|
/**
|
|
|
* 创建一个桶
|
|
|
*/
|
|
@@ -39,6 +43,8 @@ public class MinioUtil {
|
|
|
boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucket).build());
|
|
|
if (!found) {
|
|
|
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucket).build());
|
|
|
+ // 设置为公开访问
|
|
|
+ setBucketPublic(bucket);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -46,23 +52,78 @@ public class MinioUtil {
|
|
|
* 上传一个文件
|
|
|
*/
|
|
|
public String uploadFile(InputStream stream, String bucket, String objectName) throws Exception {
|
|
|
- minioClient.putObject(PutObjectArgs.builder().bucket(bucket).object(objectName)
|
|
|
- .stream(stream, -1, 10485760).contentType("Content-Type").build());
|
|
|
- GetPresignedObjectUrlArgs presignedArgs = GetPresignedObjectUrlArgs.builder()
|
|
|
- .method(Method.GET)
|
|
|
+ String contentType = getContentType(objectName);
|
|
|
+
|
|
|
+ HashMultimap<String, String> headers = HashMultimap.create();
|
|
|
+ headers.put("x-amz-acl", "public-read");
|
|
|
+ minioClient.putObject(PutObjectArgs.builder()
|
|
|
.bucket(bucket)
|
|
|
.object(objectName)
|
|
|
- .expiry(7, TimeUnit.DAYS)
|
|
|
- .build();
|
|
|
- minioClient.getPresignedObjectUrl(presignedArgs);
|
|
|
- String fullUrl = minioClient.getPresignedObjectUrl(presignedArgs);
|
|
|
- return getPathFromUrl(fullUrl);
|
|
|
+ .stream(stream, -1, 10485760)
|
|
|
+ .contentType(contentType)
|
|
|
+ .headers(headers)
|
|
|
+ .build());
|
|
|
+ String fullUrl = baseUrl + "/" + bucket +"/" + objectName;
|
|
|
+ System.out.println("上传成功,访问地址为:" + fullUrl);
|
|
|
+// GetPresignedObjectUrlArgs presignedArgs = GetPresignedObjectUrlArgs.builder()
|
|
|
+// .method(Method.GET)
|
|
|
+// .bucket(bucket)
|
|
|
+// .object(objectName)
|
|
|
+// .expiry(7, TimeUnit.DAYS)
|
|
|
+// .build();
|
|
|
+// minioClient.getPresignedObjectUrl(presignedArgs);
|
|
|
+// String fullUrl = minioClient.getPresignedObjectUrl(presignedArgs);
|
|
|
+// return getPathFromUrl(fullUrl);
|
|
|
+ return fullUrl;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 设置 bucket 为允许公开访问
|
|
|
+ public void setBucketPublic(String bucketName) throws Exception {
|
|
|
+ String policyJson = "{\n" +
|
|
|
+ " \"Version\": \"2012-10-17\",\n" +
|
|
|
+ " \"Statement\": [\n" +
|
|
|
+ " {\n" +
|
|
|
+ " \"Sid\": \"PublicReadGetObject\",\n" +
|
|
|
+ " \"Effect\": \"Allow\",\n" +
|
|
|
+ " \"Principal\": \"*\",\n" +
|
|
|
+ " \"Action\": \"s3:GetObject\",\n" +
|
|
|
+ " \"Resource\": \"arn:aws:s3:::" + bucketName + "/*\"\n" +
|
|
|
+ " }\n" +
|
|
|
+ " ]\n" +
|
|
|
+ "}";
|
|
|
+
|
|
|
+ minioClient.setBucketPolicy(
|
|
|
+ SetBucketPolicyArgs.builder()
|
|
|
+ .bucket(bucketName)
|
|
|
+ .config(policyJson)
|
|
|
+ .build()
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getContentType(String objectName) {
|
|
|
+ String contentType;
|
|
|
+ String fileExtension = objectName.substring(objectName.lastIndexOf("."));
|
|
|
+ switch (fileExtension.toLowerCase()) {
|
|
|
+ case ".jpg":
|
|
|
+ case ".jpeg":
|
|
|
+ contentType = "image/jpeg";
|
|
|
+ break;
|
|
|
+ case ".png":
|
|
|
+ contentType = "image/png";
|
|
|
+ break;
|
|
|
+ case ".mp4":
|
|
|
+ contentType = "video/mp4";
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ contentType = "application/octet-stream";
|
|
|
+ }
|
|
|
+ return contentType;
|
|
|
}
|
|
|
|
|
|
public String getPathFromUrl(String fullUrl) {
|
|
|
try {
|
|
|
URL url = new URL(fullUrl);
|
|
|
- return url.getPath();
|
|
|
+ return baseUrl + url.getPath();
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
return null;
|
|
@@ -114,6 +175,17 @@ public class MinioUtil {
|
|
|
* 删除一个桶
|
|
|
*/
|
|
|
public void deleteBucket(String bucket) throws Exception {
|
|
|
+ Iterable<Result<Item>> results = minioClient.listObjects(
|
|
|
+ ListObjectsArgs.builder().bucket(bucket).recursive(true).build());
|
|
|
+
|
|
|
+ // 删除所有文件
|
|
|
+ for (Result<Item> result : results) {
|
|
|
+ Item item = result.get();
|
|
|
+ minioClient.removeObject(RemoveObjectArgs.builder()
|
|
|
+ .bucket(bucket)
|
|
|
+ .object(item.objectName())
|
|
|
+ .build());
|
|
|
+ }
|
|
|
minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucket).build());
|
|
|
}
|
|
|
|