From 77f99800075afbfe398d1e9b8b567407ff9f539b Mon Sep 17 00:00:00 2001
From: 龚焕茏 <2842157468@qq.com>
Date: 星期三, 06 三月 2024 17:36:30 +0800
Subject: [PATCH] minio文件上传实现
---
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/controller/FileController.java | 50 ++++
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/dto/MinioVideoResult.java | 15 +
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/dto/Result.java | 95 ++++++++
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/MinioResult.java | 27 ++
dujy-modules/dujy-demo/pom.xml | 2
dujy-admin/src/main/resources/application-dev.yml | 7
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/exception/BaseException.java | 22 ++
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/util/MinioUtil.java | 314 ++++++++--------------------
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/dto/FileDTO.java | 43 +++
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/dto/ResultCode.java | 68 ++++++
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/exception/UploadFailException.java | 14 +
11 files changed, 426 insertions(+), 231 deletions(-)
diff --git a/dujy-admin/src/main/resources/application-dev.yml b/dujy-admin/src/main/resources/application-dev.yml
index c8a4d27..3215e6e 100644
--- a/dujy-admin/src/main/resources/application-dev.yml
+++ b/dujy-admin/src/main/resources/application-dev.yml
@@ -278,7 +278,6 @@
client-secret: 1f7d08**********5b7**********29e
redirect-uri: ${justauth.address}/social-callback?source=gitlab
minio:
- endpoint: http://127.0.0.1:9000
- accessKey: UqCoWBRAVf7DI1gcznSg
- secretKey: UL4hmEIcgFpTmSaJEpYTiQDIWHEG4RavPxTyMjgX
- bucketName: dujyimage
+ url: http://127.0.0.1:9000
+ access-key: root
+ secret-key: root1234
diff --git a/dujy-modules/dujy-demo/pom.xml b/dujy-modules/dujy-demo/pom.xml
index e85885e..e0ad3dd 100644
--- a/dujy-modules/dujy-demo/pom.xml
+++ b/dujy-modules/dujy-demo/pom.xml
@@ -127,7 +127,7 @@
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
- <version>8.4.3</version>
+ <version>7.0.2</version>
</dependency>
diff --git a/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/controller/FileController.java b/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/controller/FileController.java
new file mode 100644
index 0000000..70a28a0
--- /dev/null
+++ b/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/controller/FileController.java
@@ -0,0 +1,50 @@
+package org.dromara.demo.controller;
+
+import org.dromara.demo.domain.MinioResult;
+import org.dromara.demo.domain.dto.FileDTO;
+import org.dromara.demo.domain.dto.MinioVideoResult;
+import org.dromara.demo.domain.dto.Result;
+import org.dromara.demo.util.MinioUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.Objects;
+
+/**
+ * @author Satori
+ * @date 2021/10/15
+ */
+@RestController
+@RequestMapping("/api/v1/file")
+public class FileController {
+
+ @Autowired
+ private MinioUtil client;
+
+ @PostMapping("/upload/image")
+ public Result upload(MultipartFile file) {
+ MinioResult result = client.uploadFile(file, "image");
+ return Result.success(result);
+ }
+
+ @PostMapping("/upload/document")
+ public Result publicUpload(MultipartFile file, FileDTO fileDTO) {
+ MinioResult result = client.uploadFile(file, "document");
+ if (Objects.nonNull(fileDTO.getFileContentType())) {
+ result.setFileContentType(fileDTO.getFileContentType());
+ }
+ return Result.success(result);
+ }
+
+ @PostMapping("/upload/video")
+ public Result videoUpload(MultipartFile file) {
+ MinioVideoResult minioVideoResult = new MinioVideoResult();
+ MinioResult result = client.uploadFile(file, "video");
+ minioVideoResult.setVideoUrl(result.getUrl());
+ minioVideoResult.setRealName(file.getOriginalFilename());
+ return Result.success(minioVideoResult);
+ }
+}
diff --git a/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/MinioResult.java b/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/MinioResult.java
new file mode 100644
index 0000000..13b4399
--- /dev/null
+++ b/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/MinioResult.java
@@ -0,0 +1,27 @@
+package org.dromara.demo.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author gonghl
+ * @date 2024-3-6
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+
+public class MinioResult {
+
+ public MinioResult(String url) {
+ this.url = url;
+ }
+
+ private String bucketName;
+ private String fileName;
+ private String url;
+ private String realName;
+ private String fileContentType;
+
+}
diff --git a/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/dto/FileDTO.java b/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/dto/FileDTO.java
new file mode 100644
index 0000000..049b8c2
--- /dev/null
+++ b/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/dto/FileDTO.java
@@ -0,0 +1,43 @@
+package org.dromara.demo.domain.dto;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author zhangliang
+ * @version 1.0
+ * @date 2021/12/23 15:24
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@JsonInclude(JsonInclude.Include.NON_EMPTY)
+public class FileDTO {
+
+ private static final long serialVersionUID = 7047764513709611598L;
+
+ private String fileId;
+ /**
+ * 缁戝畾鏁版嵁鐨刬d
+ */
+ private String dataId;
+
+ /**
+ * 鍦板潃
+ */
+ private String location;
+
+ /**
+ * 鏂囦欢鍚嶇О
+ */
+ private String fileName;
+
+
+ private String fileSize;
+
+ private String fileContentType;
+
+ private Integer deleted;
+}
diff --git a/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/dto/MinioVideoResult.java b/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/dto/MinioVideoResult.java
new file mode 100644
index 0000000..63cd404
--- /dev/null
+++ b/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/dto/MinioVideoResult.java
@@ -0,0 +1,15 @@
+package org.dromara.demo.domain.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class MinioVideoResult {
+ private String coverUrl;
+ private String videoUrl;
+ private String realName;
+ private String videoTime;
+}
diff --git a/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/dto/Result.java b/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/dto/Result.java
new file mode 100644
index 0000000..7a2e798
--- /dev/null
+++ b/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/dto/Result.java
@@ -0,0 +1,95 @@
+package org.dromara.demo.domain.dto;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * @author Satori
+ * @date 2020/11/12 17:29
+ */
+@Data
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@Accessors(chain = true)
+public class Result<T> {
+
+ private Integer code;
+
+ private String message;
+
+ private T result;
+
+ private Integer userId;
+
+ private String token;
+
+
+ /**
+ * 榛樿
+ *
+ * @param result
+ * @param resultCode
+ */
+ private Result(T result, ResultCode resultCode) {
+ this.result = result;
+ this.code = resultCode.getCode();
+ this.message = resultCode.getMessage();
+ }
+
+ private Result(T result, Integer code, String message) {
+ this.result = result;
+ this.code = code;
+ this.message = message;
+ }
+
+
+ private Result(ResultCode resultCode) {
+ this.result = null;
+ this.code = resultCode.getCode();
+ this.message = resultCode.getMessage();
+ }
+
+
+ private Result(boolean code) {
+ if (code) {
+ this.result = null;
+ this.code = ResultCode.SUCCESS.getCode();
+ this.message = ResultCode.SUCCESS.getMessage();
+ } else {
+ this.result = null;
+ this.code = ResultCode.SYSTEM_ERROR.getCode();
+ this.message = ResultCode.SYSTEM_ERROR.getMessage();
+ }
+ }
+
+
+ public static <T> Result<T> success(T data) {
+ return new Result<T>(data, ResultCode.SUCCESS);
+ }
+
+ public static <T> Result<T> success(T data, String message) {
+ return new Result(data, ResultCode.SUCCESS.getCode(), message);
+ }
+
+ public static Result success() {
+ return new Result<>(true);
+ }
+
+
+
+ public static Result error() {
+ return new Result(ResultCode.SYSTEM_ERROR);
+ }
+
+
+ public static <T> Result<T> error(String errorMessage, Integer errorCode) {
+ return new Result<T>(true).setMessage(errorMessage).setCode(errorCode);
+ }
+
+
+ public static <T> Result<T> error(ResultCode resultCode) {
+ return new Result<T>(null, resultCode);
+ }
+
+
+}
diff --git a/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/dto/ResultCode.java b/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/dto/ResultCode.java
new file mode 100644
index 0000000..e561abb
--- /dev/null
+++ b/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/dto/ResultCode.java
@@ -0,0 +1,68 @@
+package org.dromara.demo.domain.dto;
+
+
+/**
+ * @author Satori
+ * @date 2021/5/11
+ */
+public enum ResultCode {
+ SUCCESS(200, "璇锋眰鎴愬姛"),
+ SYSTEM_ERROR(500, "绯荤粺閿欒"),
+ UNKNOWN_REQUEST(404, "鏈煡璇锋眰,璇锋牳瀵瑰悗鍐嶉噸璇�!"),
+ PARAM_IS_INVALID(1000, "鍙傛暟閿欒"),
+ USER_IS_EXISTED(1001, "鐢ㄦ埛宸插瓨鍦�"),
+ USER_NOT_EXIST(1002, "鐢ㄦ埛涓嶅瓨鍦�"),
+ LOGIN_EXCEPTION(1003, "瀵嗙爜鎴栬处鎴峰悕閿欒"),
+ USER_BANNED(1004, "鐢ㄦ埛褰撳墠涓嶅彲鐢�"),
+ TOKEN_EXPIRE(1005, "鐧诲綍宸插け鏁�"),
+ EMAIL_EXIST(1006, "閭宸茶娉ㄥ唽"),
+ EMAIL_NO_BINDING(1008, "褰撳墠閭鏈粦瀹氫换浣曡处鎴�"),
+ NO_DEFAULT_SYS_EMAIL(1009, "褰撳墠绯荤粺鏈缃偖绠�,璇疯仈绯荤鐞嗗憳璁剧疆"),
+ PASSWORD_RESET_PAGE_EXPIRE(1010, "褰撳墠閲嶇疆瀵嗙爜椤甸潰宸茶繃鏈�"),
+ CAPTCHA_ERROR_EXCEPTION(1011, "楠岃瘉鐮侀敊璇�"),
+ MENU_HAS_CHILDREN(1012, "褰撳墠鑿滃崟杩樻湁瀛愯彍鍗�,鏃犳硶鍒犻櫎"),
+ UPLOAD_FAIL_EXCEPTION(1013, "涓婁紶澶辫触,璇疯仈绯荤鐞嗗憳鎴栨煡鐪嬮敊璇棩蹇�"),
+ PERMISSION_HAS_CHILDREN(1014, "褰撳墠鑿滃崟杩樻湁瀛愯彍鍗�,鏃犳硶鍒犻櫎"),
+ IMG_NOT_EXISTS(1015,"鍥剧墖涓嶈兘涓虹┖"),
+ TEMPLATE_IS_EXISTED(1016,"妯℃澘宸插瓨鍦�"),
+ NAME_IS_EXISTED(1017,"鍚嶅瓧宸插瓨鍦�"),
+ REST_PASS_EXCEPTION(1018,"瀵嗙爜閿欒"),
+ REST_PASS_ATYPISM(1019,"涓ゆ瀵嗙爜杈撳叆涓嶄竴鑷�");
+
+
+ private Integer code;
+ private String message;
+
+
+ public static ResultCode getByCode(Integer code) {
+ for (ResultCode value : values()) {
+ if (value.getCode().equals(code)) {
+ return value;
+ }
+ }
+ return null;
+ }
+
+ public static ResultCode getByMessage(String message) {
+ for (ResultCode value : values()) {
+ if (value.getMessage().equals(message)) {
+ return value;
+ }
+ }
+ return null;
+ }
+
+
+ ResultCode(Integer code, String message) {
+ this.code = code;
+ this.message = message;
+ }
+
+ public Integer getCode() {
+ return this.code;
+ }
+
+ public String getMessage() {
+ return this.message;
+ }
+}
diff --git a/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/exception/BaseException.java b/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/exception/BaseException.java
new file mode 100644
index 0000000..f525156
--- /dev/null
+++ b/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/exception/BaseException.java
@@ -0,0 +1,22 @@
+package org.dromara.demo.exception;
+
+import lombok.Getter;
+import org.dromara.demo.domain.dto.ResultCode;
+
+/**
+ * @author Satori
+ * @date 2021/5/11
+ */
+
+public class BaseException extends RuntimeException {
+
+ @Getter
+ protected ResultCode resultCode;
+
+ public BaseException(ResultCode resultCode) {
+ super(resultCode.getMessage());
+ this.resultCode = resultCode;
+
+ }
+
+}
diff --git a/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/exception/UploadFailException.java b/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/exception/UploadFailException.java
new file mode 100644
index 0000000..49be40e
--- /dev/null
+++ b/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/exception/UploadFailException.java
@@ -0,0 +1,14 @@
+package org.dromara.demo.exception;
+
+
+import org.dromara.demo.domain.dto.ResultCode;
+
+/**
+ * @author Satori
+ * @date 2021/10/15
+ */
+public class UploadFailException extends BaseException {
+ public UploadFailException() {
+ super(ResultCode.UNKNOWN_REQUEST);
+ }
+}
diff --git a/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/util/MinioUtil.java b/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/util/MinioUtil.java
index 079ef7f..b761b2a 100644
--- a/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/util/MinioUtil.java
+++ b/dujy-modules/dujy-demo/src/main/java/org/dromara/demo/util/MinioUtil.java
@@ -1,266 +1,128 @@
package org.dromara.demo.util;
-import io.minio.*;
-import io.minio.messages.DeleteError;
-import io.minio.messages.DeleteObject;
-import io.minio.messages.Item;
-import jakarta.servlet.ServletOutputStream;
-import jakarta.servlet.http.HttpServletResponse;
-import org.apache.commons.compress.utils.IOUtils;
-import org.dromara.common.core.utils.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
+import cn.hutool.core.util.IdUtil;
+import io.minio.MinioClient;
+import io.minio.PutObjectOptions;
+import jakarta.annotation.PostConstruct;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.dromara.demo.domain.MinioResult;
+import org.dromara.demo.exception.UploadFailException;
+import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.stream.Collectors;
+import java.io.ByteArrayInputStream;
/**
- * @description锛� minio宸ュ叿绫�
- * @version
+ * @author gonghl
+ * @date 2024-3-6
*/
@Component
+@ConfigurationProperties(prefix = "minio")
+@Slf4j
+@Data
public class MinioUtil {
- @Autowired
- private MinioClient minioClient;
- @Value("${minio.bucketName}")
- private String bucketName;
- /**
- * description: 鍒ゆ柇bucket鏄惁瀛樺湪锛屼笉瀛樺湪鍒欏垱寤�
- *
- * @return: void
- */
- public void existBucket(String name) {
+
+ private String url;
+ private String accessKey;
+ private String secretKey;
+ private MinioClient client;
+
+
+ public MinioResult uploadFile(MultipartFile file, String bucketName) {
try {
- boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(name).build());
- if (!exists) {
- minioClient.makeBucket(MakeBucketArgs.builder().bucket(name).build());
+ if (!client.bucketExists(bucketName)) {
+ client.makeBucket(bucketName);
+ client.setBucketPolicy(bucketName, "public");
+ }
+
+ String[] split = file.getOriginalFilename().split("\\.");
+ String suffix = split[split.length - 1];
+
+ if (split.length < 2) {
+ suffix = "";
+ }
+
+ String fileName = StringUtils.join(IdUtil.randomUUID(), ".", suffix);
+
+ client.putObject(bucketName, fileName, file.getInputStream(), new PutObjectOptions(file.getSize(), 5 * 1024 * 1024));
+ String fileUrl = getFilePath(bucketName, fileName);
+ if (StringUtils.isNotBlank(fileUrl)) {
+ return new MinioResult(bucketName, fileName, fileUrl, file.getOriginalFilename(), null);
}
} catch (Exception e) {
- e.printStackTrace();
+ log.error("涓婁紶澶辫触,澶辫触璇︽儏淇℃伅:{}", e.getMessage());
+ throw new UploadFailException();
}
+ return null;
+
}
- /**
- * 鍒涘缓瀛樺偍bucket
- * @param bucketName 瀛樺偍bucket鍚嶇О
- * @return Boolean
- */
- public Boolean makeBucket(String bucketName) {
+ public MinioResult uploadFile(ByteArrayInputStream in, String name, String bucketName) {
+
+ String[] split = name.split("\\.");
+ String suffix = split[split.length - 1];
+ if (split.length < 2) {
+ suffix = "";
+ }
+ String fileName = StringUtils.join(IdUtil.randomUUID(), ".", suffix);
try {
- minioClient.makeBucket(MakeBucketArgs.builder()
- .bucket(bucketName)
- .build());
+ client.putObject(bucketName, fileName, in, new PutObjectOptions(in.available(), 5 * 1024 * 1024));
+ String fileUrl = getFilePath(bucketName, fileName);
+ if (StringUtils.isNotBlank(fileUrl)) {
+ return new MinioResult(bucketName, fileName, fileUrl, name, null);
+ }
} catch (Exception e) {
- e.printStackTrace();
- return false;
+ log.error("涓婁紶澶辫触,澶辫触璇︽儏淇℃伅:{}", e.getMessage());
+ throw new UploadFailException();
}
- return true;
+
+ return null;
+
}
- /**
- * 鍒犻櫎瀛樺偍bucket
- * @param bucketName 瀛樺偍bucket鍚嶇О
- * @return Boolean
- */
- public Boolean removeBucket(String bucketName) {
+ public String uploadImage(ByteArrayInputStream in, String bucketName) {
try {
- minioClient.removeBucket(RemoveBucketArgs.builder()
- .bucket(bucketName)
- .build());
+ String fileName = IdUtil.randomUUID() + ".jpg";
+ client.putObject(bucketName, fileName, in, new PutObjectOptions(in.available(), 5 * 1024 * 1024));
+ String fileUrl = getFilePath(bucketName, fileName);
+ if (StringUtils.isNotBlank(fileUrl)) {
+ return fileUrl;
+ }
} catch (Exception e) {
- e.printStackTrace();
- return false;
+ log.error("涓婁紶澶辫触,澶辫触璇︽儏淇℃伅:{}", e.getMessage());
+ throw new UploadFailException();
}
- return true;
- }
- /**
- * description: 涓婁紶鏂囦欢
- *
- * @param multipartFile
- * @return: java.lang.String
- */
- public List<String> uploads(MultipartFile[] multipartFile) {
- List<String> names = new ArrayList<>(multipartFile.length);
- for (MultipartFile file : multipartFile) {
- String fileName = file.getOriginalFilename();
- String[] split = fileName.split("\\.");
- if (split.length > 1) {
- fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1];
- } else {
- fileName = fileName + System.currentTimeMillis();
- }
- InputStream in = null;
- try {
- in = file.getInputStream();
- minioClient.putObject(PutObjectArgs.builder()
- .bucket(bucketName)
- .object(fileName)
- .stream(in, in.available(), -1)
- .contentType(file.getContentType())
- .build()
- );
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (in != null) {
- try {
- in.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- names.add(fileName);
- }
- return names;
+ return null;
+
}
- /**
- * 涓婁紶鍗曚釜鏂囦欢
- * @param multipartFile
- * @return
- */
- public String upload(MultipartFile multipartFile) {
-
- String fileName = multipartFile.getOriginalFilename();
- String[] split = fileName.split("\\.");
- if (split.length > 1) {
- fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1];
- } else {
- fileName = fileName + System.currentTimeMillis();
- }
- InputStream in = null;
- try {
- in = multipartFile.getInputStream();
- minioClient.putObject(PutObjectArgs.builder()
- .bucket(bucketName)
- .object(fileName)
- .stream(in, in.available(), -1)
- .contentType(multipartFile.getContentType())
- .build()
- );
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (in != null) {
- try {
- in.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-
- return fileName;
- }
-
- /**
- * description: 涓嬭浇鏂囦欢
- *
- * @param fileName
- * @return: org.springframework.http.ResponseEntity<byte [ ]>
- */
- public ResponseEntity<byte[]> download(String fileName) {
- ResponseEntity<byte[]> responseEntity = null;
- InputStream in = null;
- ByteArrayOutputStream out = null;
+ public String getFilePath(String bucketName, String fileName) {
+ String wordUrl = null;
try {
- in = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build());
- out = new ByteArrayOutputStream();
- IOUtils.copy(in, out);
- //灏佽杩斿洖鍊�
- byte[] bytes = out.toByteArray();
- HttpHeaders headers = new HttpHeaders();
- try {
- headers.add("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
+ if (client.getObject(bucketName, fileName) == null) {
+ return null;
}
- headers.setContentLength(bytes.length);
- headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
- headers.setAccessControlExposeHeaders(Arrays.asList("*"));
- responseEntity = new ResponseEntity<byte[]>(bytes, headers, HttpStatus.OK);
+
+ return StringUtils.join("/", bucketName, "/", fileName);
} catch (Exception e) {
- e.printStackTrace();
- } finally {
- try {
- if (in != null) {
- try {
- in.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- if (out != null) {
- out.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
+ log.error("鑾峰彇bucket涓�:{},鏂囦欢鍚嶄负{}鏃跺嚭閿�,鍘熷洜:{}", bucketName, fileName, e.getMessage());
}
- return responseEntity;
- }
- /**
- * 涓嬭浇鏂囦欢
- *
- * @param originalName 鏂囦欢璺緞
- */
- public InputStream downloadFile(String originalName, HttpServletResponse response) {
- try {
-
- InputStream file = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(originalName).build());
- String filename = new String(originalName.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
- if (StringUtils.isNotBlank(originalName)) {
- filename = originalName;
- }
- response.setHeader("Content-Disposition", "attachment;filename=" + filename);
- ServletOutputStream servletOutputStream = response.getOutputStream();
- int len;
- byte[] buffer = new byte[1024];
- while ((len = file.read(buffer)) > 0) {
- servletOutputStream.write(buffer, 0, len);
- }
- servletOutputStream.flush();
- file.close();
- servletOutputStream.close();
- return file;
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
+ return null;
}
- /**
- * 鎵归噺鍒犻櫎鏂囦欢瀵硅薄
- * @param bucketName 瀛樺偍bucket鍚嶇О
- * @param objects 瀵硅薄鍚嶇О闆嗗悎
- */
- public Iterable<Result<DeleteError>> removeObjects(String bucketName, List<String> objects) {
- List<DeleteObject> dos = objects.stream().map(e -> new DeleteObject(e)).collect(Collectors.toList());
- Iterable<Result<DeleteError>> results = minioClient.removeObjects(RemoveObjectsArgs.builder().bucket(bucketName).objects(dos).build());
- return results;
- }
+ @PostConstruct
+ public void creatConnect() throws Exception {
+ this.client = new MinioClient(url, accessKey, secretKey);
+
+ }
}
-
-
--
Gitblit v1.8.0