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;