diff --git a/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/download/package-info.java b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/download/package-info.java
deleted file mode 100644
index 97f6ebd6..00000000
--- a/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/download/package-info.java
+++ /dev/null
@@ -1 +0,0 @@
-package com.jmsoftware.maf.authcenter.download;
diff --git a/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/read/controller/ReadResourceController.java b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/read/controller/ReadResourceController.java
new file mode 100644
index 00000000..04045f0e
--- /dev/null
+++ b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/read/controller/ReadResourceController.java
@@ -0,0 +1,37 @@
+package com.jmsoftware.maf.authcenter.read.controller;
+
+import com.jmsoftware.maf.authcenter.read.entity.GetSingleResourcePayload;
+import com.jmsoftware.maf.authcenter.read.service.ReadResourceService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.core.io.Resource;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+
+/**
+ *
ReadResourceController
+ *
+ * Change description here.
+ *
+ * @author Johnny Miller (鍾俊), email: johnnysviva@outlook.com, 6/20/21 5:16 PM
+ **/
+@Validated
+@RestController
+@RequiredArgsConstructor
+@Api(tags = {"Read resource API"})
+public class ReadResourceController {
+ private final ReadResourceService readResourceService;
+
+ @GetMapping("/{bucket}/{object}")
+ @ApiOperation(value = "Get single resource", notes = "Get or download single resource")
+ public ResponseEntity getSingleResource(@PathVariable String bucket, @PathVariable String object,
+ @Valid GetSingleResourcePayload payload) {
+ return readResourceService.getSingleResource(bucket, object, payload);
+ }
+}
diff --git a/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/read/entity/GetSingleResourcePayload.java b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/read/entity/GetSingleResourcePayload.java
new file mode 100644
index 00000000..c513d0e9
--- /dev/null
+++ b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/read/entity/GetSingleResourcePayload.java
@@ -0,0 +1,15 @@
+package com.jmsoftware.maf.authcenter.read.entity;
+
+import lombok.Data;
+
+/**
+ * GetSingleResourcePayload
+ *
+ * Change description here.
+ *
+ * @author Johnny Miller (鍾俊), email: johnnysviva@outlook.com, 6/20/21 7:16 PM
+ **/
+@Data
+public class GetSingleResourcePayload {
+ private Boolean downloadable;
+}
diff --git a/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/read/package-info.java b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/read/package-info.java
new file mode 100644
index 00000000..dbd0c1b8
--- /dev/null
+++ b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/read/package-info.java
@@ -0,0 +1 @@
+package com.jmsoftware.maf.authcenter.read;
diff --git a/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/read/service/ReadResourceService.java b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/read/service/ReadResourceService.java
new file mode 100644
index 00000000..9ecf6914
--- /dev/null
+++ b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/read/service/ReadResourceService.java
@@ -0,0 +1,33 @@
+package com.jmsoftware.maf.authcenter.read.service;
+
+import com.jmsoftware.maf.authcenter.read.entity.GetSingleResourcePayload;
+import org.springframework.core.io.Resource;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ *
ReadResourceService
+ *
+ * Change description here.
+ *
+ * @author Johnny Miller (鍾俊), email: johnnysviva@outlook.com, 6/20/21 5:17 PM
+ **/
+@Validated
+public interface ReadResourceService {
+ String BUCKET_OBJECT_NAME_REGEX = "^.+/.+$";
+
+ /**
+ * Gets single resource.
+ *
+ * @param bucket the bucket
+ * @param object the object
+ * @param payload the payload
+ * @return the single resource
+ */
+ ResponseEntity getSingleResource(@NotBlank String bucket, @NotBlank String object,
+ @Valid @NotNull GetSingleResourcePayload payload);
+}
diff --git a/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/read/service/impl/ReadResourceServiceImpl.java b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/read/service/impl/ReadResourceServiceImpl.java
new file mode 100644
index 00000000..c1e9aa8b
--- /dev/null
+++ b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/read/service/impl/ReadResourceServiceImpl.java
@@ -0,0 +1,55 @@
+package com.jmsoftware.maf.authcenter.read.service.impl;
+
+import cn.hutool.core.util.BooleanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.jmsoftware.maf.authcenter.read.entity.GetSingleResourcePayload;
+import com.jmsoftware.maf.authcenter.read.service.ReadResourceService;
+import com.jmsoftware.maf.springcloudstarter.helper.MinioHelper;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import lombok.val;
+import org.springframework.core.io.InputStreamResource;
+import org.springframework.core.io.Resource;
+import org.springframework.http.ContentDisposition;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * ReadResourceServiceImpl
+ *
+ * Change description here.
+ *
+ * @author Johnny Miller (鍾俊), email: johnnysviva@outlook.com, 6/20/21 5:18 PM
+ **/
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class ReadResourceServiceImpl implements ReadResourceService {
+ private final MinioHelper minioHelper;
+
+ @Override
+ public ResponseEntity getSingleResource(@NotBlank String bucket, @NotBlank String object,
+ @Valid @NotNull GetSingleResourcePayload payload) {
+ val statObjectResponse = minioHelper.statObject(bucket, object);
+ if (ObjectUtil.isNull(statObjectResponse)) {
+ return ResponseEntity.notFound().build();
+ }
+ val inputStream = minioHelper.getObject(bucket, object);
+ val bodyBuilder = ResponseEntity.ok();
+ if (BooleanUtil.isTrue(payload.getDownloadable())) {
+ String contentDisposition = ContentDisposition.builder("attachment").filename(object).build().toString();
+ bodyBuilder.header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition);
+ }
+ return bodyBuilder
+ .header(HttpHeaders.ACCEPT_RANGES, "bytes")
+ .contentLength(statObjectResponse.size())
+ .contentType(MediaType.parseMediaType(statObjectResponse.contentType()))
+ .body(new InputStreamResource(inputStream));
+ }
+}
diff --git a/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/read/service/impl/package-info.java b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/read/service/impl/package-info.java
new file mode 100644
index 00000000..50a1683a
--- /dev/null
+++ b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/read/service/impl/package-info.java
@@ -0,0 +1 @@
+package com.jmsoftware.maf.authcenter.read.service.impl;
diff --git a/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/read/service/package-info.java b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/read/service/package-info.java
new file mode 100644
index 00000000..3c35548a
--- /dev/null
+++ b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/read/service/package-info.java
@@ -0,0 +1 @@
+package com.jmsoftware.maf.authcenter.read.service;
diff --git a/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/upload/package-info.java b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/upload/package-info.java
deleted file mode 100644
index 019cbeb3..00000000
--- a/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/upload/package-info.java
+++ /dev/null
@@ -1 +0,0 @@
-package com.jmsoftware.maf.authcenter.upload;
diff --git a/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/upload/service/package-info.java b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/upload/service/package-info.java
deleted file mode 100644
index acfbc7dc..00000000
--- a/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/upload/service/package-info.java
+++ /dev/null
@@ -1 +0,0 @@
-package com.jmsoftware.maf.authcenter.upload.service;
diff --git a/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/upload/controller/UploadController.java b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/write/controller/WriteResourceController.java
similarity index 56%
rename from static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/upload/controller/UploadController.java
rename to static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/write/controller/WriteResourceController.java
index d1d6e03e..f46bbae3 100644
--- a/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/upload/controller/UploadController.java
+++ b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/write/controller/WriteResourceController.java
@@ -1,13 +1,14 @@
-package com.jmsoftware.maf.authcenter.upload.controller;
+package com.jmsoftware.maf.authcenter.write.controller;
-import com.jmsoftware.maf.authcenter.upload.service.UploadService;
+import com.jmsoftware.maf.authcenter.write.service.WriteResourceService;
import com.jmsoftware.maf.common.bean.ResponseBodyBean;
import com.jmsoftware.maf.common.exception.BusinessException;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@@ -15,7 +16,7 @@
import java.io.IOException;
/**
- * UploadController
+ * WriteResourceController
*
* Change description here.
*
@@ -24,13 +25,15 @@
@Validated
@RestController
@RequiredArgsConstructor
-@RequestMapping("/upload")
-public class UploadController {
- private final UploadService uploadService;
+@Api(tags = {"Write resource API"})
+public class WriteResourceController {
+ private final WriteResourceService writeResourceService;
- @PostMapping("/single")
+ @PostMapping("/upload/single")
@SneakyThrows({IOException.class, BusinessException.class})
+ @ApiOperation(value = "Upload single resource", notes = "Upload single resource")
public ResponseBodyBean uploadSingleResource(@RequestParam("file") MultipartFile multipartFile) {
- return ResponseBodyBean.ofSuccess(uploadService.uploadSingleResource(multipartFile), "Succeed to upload");
+ return ResponseBodyBean.ofSuccess(writeResourceService.uploadSingleResource(multipartFile),
+ "Succeed to upload");
}
}
diff --git a/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/write/package-info.java b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/write/package-info.java
new file mode 100644
index 00000000..2d9b9d23
--- /dev/null
+++ b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/write/package-info.java
@@ -0,0 +1 @@
+package com.jmsoftware.maf.authcenter.write;
diff --git a/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/upload/service/UploadService.java b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/write/service/WriteResourceService.java
similarity index 85%
rename from static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/upload/service/UploadService.java
rename to static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/write/service/WriteResourceService.java
index 8582b065..847c927d 100644
--- a/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/upload/service/UploadService.java
+++ b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/write/service/WriteResourceService.java
@@ -1,4 +1,4 @@
-package com.jmsoftware.maf.authcenter.upload.service;
+package com.jmsoftware.maf.authcenter.write.service;
import com.jmsoftware.maf.common.exception.BusinessException;
import org.springframework.validation.annotation.Validated;
@@ -8,14 +8,14 @@
import java.io.IOException;
/**
- * UploadService
+ * WriteResourceService
*
* Change description here.
*
* @author Johnny Miller (鍾俊), email: johnnysviva@outlook.com, 6/20/21 2:19 PM
**/
@Validated
-public interface UploadService {
+public interface WriteResourceService {
/**
* Upload single resource string.
*
diff --git a/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/upload/service/impl/UploadServiceImpl.java b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/write/service/impl/WriteResourceServiceImpl.java
similarity index 86%
rename from static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/upload/service/impl/UploadServiceImpl.java
rename to static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/write/service/impl/WriteResourceServiceImpl.java
index c191a73c..355b6844 100644
--- a/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/upload/service/impl/UploadServiceImpl.java
+++ b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/write/service/impl/WriteResourceServiceImpl.java
@@ -1,7 +1,7 @@
-package com.jmsoftware.maf.authcenter.upload.service.impl;
+package com.jmsoftware.maf.authcenter.write.service.impl;
import cn.hutool.core.util.StrUtil;
-import com.jmsoftware.maf.authcenter.upload.service.UploadService;
+import com.jmsoftware.maf.authcenter.write.service.WriteResourceService;
import com.jmsoftware.maf.common.exception.BusinessException;
import com.jmsoftware.maf.springcloudstarter.helper.MinioHelper;
import lombok.RequiredArgsConstructor;
@@ -16,7 +16,7 @@
import java.io.IOException;
/**
- *
UploadServiceImpl
+ * WriteResourceServiceImpl
*
* Change description here.
*
@@ -25,7 +25,7 @@
@Slf4j
@Service
@RequiredArgsConstructor
-public class UploadServiceImpl implements UploadService {
+public class WriteResourceServiceImpl implements WriteResourceService {
private final MinioHelper minioHelper;
@Override
diff --git a/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/write/service/package-info.java b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/write/service/package-info.java
new file mode 100644
index 00000000..5cafe970
--- /dev/null
+++ b/static-resource-center/src/main/java/com/jmsoftware/maf/authcenter/write/service/package-info.java
@@ -0,0 +1 @@
+package com.jmsoftware.maf.authcenter.write.service;