From 76ad1d78f15e1db45e088aaec080f40a4fbcf824 Mon Sep 17 00:00:00 2001 From: tianliyong Date: Tue, 20 Dec 2022 14:28:44 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=B5=81=E4=BC=98=E5=8C=96=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/oss/client/controller/WebFileController.java | 6 ++++-- .../src/main/java/cn/axzo/oss/common/enums/CodeEnum.java | 2 ++ .../main/java/cn/axzo/oss/service/impl/FileServiceImpl.java | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/oss-client/src/main/java/cn/axzo/oss/client/controller/WebFileController.java b/oss-client/src/main/java/cn/axzo/oss/client/controller/WebFileController.java index 6180b95..7527cab 100644 --- a/oss-client/src/main/java/cn/axzo/oss/client/controller/WebFileController.java +++ b/oss-client/src/main/java/cn/axzo/oss/client/controller/WebFileController.java @@ -112,14 +112,16 @@ public class WebFileController { @SneakyThrows @GetMapping("/v1/file/download") @CrossOrigin - @PreBuildContext + //@PreBuildContext public void download(@Valid ServerFileDownloadDto dto, HttpServletResponse response) { ServerFileDownloadResponse result = fileService.download(dto); InputStream inputStream = null; OutputStream outputStream = response.getOutputStream(); try { inputStream = result.getFileStream(); - response.setContentType("application/x-download"); + //response.setContentType("application/x-download"); + response.setContentType("image/jpg"); + response.setCharacterEncoding("UTF-8"); response.addHeader("Content-Disposition", "attachment;filename=" + result.getFileName() + "." + result.getFileFormat()); IOUtils.copy(inputStream, outputStream); } catch (Exception e) { diff --git a/oss-common/src/main/java/cn/axzo/oss/common/enums/CodeEnum.java b/oss-common/src/main/java/cn/axzo/oss/common/enums/CodeEnum.java index 2c009d4..a1b6830 100644 --- a/oss-common/src/main/java/cn/axzo/oss/common/enums/CodeEnum.java +++ b/oss-common/src/main/java/cn/axzo/oss/common/enums/CodeEnum.java @@ -43,6 +43,8 @@ public enum CodeEnum implements EnumBase { MISSING_REQUEST_PARAM(110, "missing request param"), FILE_NAME_TOO_LONG(111, "file name too long max 128"), + FILE_NOT_FOUND(112, "file not found"), + ; private final Integer code; diff --git a/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java b/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java index b3772a3..0d15914 100644 --- a/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java +++ b/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java @@ -151,7 +151,7 @@ public class FileServiceImpl implements FileService { File file = fileDao.getByFileUuid(fileKey); if (Utility.objIsNull(file)) { log.warn("file download is null, fileKey = {}", fileKey); - return null; + BizException.error(Utility.objIsNotNull(file), CodeEnum.FILE_NOT_FOUND); } String tgtFileKey = Utility .generateFileKey(file.getDirectory(), file.getFileUuid(), file.getFileFormat()); From 413632196edf780ca395b1d9759e96fef1831db3 Mon Sep 17 00:00:00 2001 From: tianliyong Date: Tue, 20 Dec 2022 15:27:58 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=B5=81=E6=8E=A5=E5=8F=A3=E4=BC=98=E5=8C=96=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/axzo/oss/client/controller/WebFileController.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/oss-client/src/main/java/cn/axzo/oss/client/controller/WebFileController.java b/oss-client/src/main/java/cn/axzo/oss/client/controller/WebFileController.java index 7527cab..399ee1c 100644 --- a/oss-client/src/main/java/cn/axzo/oss/client/controller/WebFileController.java +++ b/oss-client/src/main/java/cn/axzo/oss/client/controller/WebFileController.java @@ -25,7 +25,6 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.Part; import javax.validation.Valid; import java.io.InputStream; import java.io.OutputStream; @@ -112,14 +111,12 @@ public class WebFileController { @SneakyThrows @GetMapping("/v1/file/download") @CrossOrigin - //@PreBuildContext public void download(@Valid ServerFileDownloadDto dto, HttpServletResponse response) { ServerFileDownloadResponse result = fileService.download(dto); InputStream inputStream = null; OutputStream outputStream = response.getOutputStream(); try { inputStream = result.getFileStream(); - //response.setContentType("application/x-download"); response.setContentType("image/jpg"); response.setCharacterEncoding("UTF-8"); response.addHeader("Content-Disposition", "attachment;filename=" + result.getFileName() + "." + result.getFileFormat()); From b710a7895d5303f53fad91d4497de7d2bbcc1e88 Mon Sep 17 00:00:00 2001 From: tianliyong Date: Tue, 20 Dec 2022 17:02:46 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=85=BC=E5=AE=B9app=E7=AB=AFoss=20accessK?= =?UTF-8?q?eyId=E5=92=8CsecretAccessKey=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oss/common/constans/CommonConstants.java | 5 +- .../s3/client/AliOssAppProClient.java | 57 +++++++++++++++++++ .../s3/impl/AliOssServiceImpl.java | 11 +++- .../oss/service/impl/FileServiceImpl.java | 39 ++++++++----- 4 files changed, 95 insertions(+), 17 deletions(-) create mode 100644 oss-integration/src/main/java/cn/axzo/oss/integration/s3/client/AliOssAppProClient.java diff --git a/oss-common/src/main/java/cn/axzo/oss/common/constans/CommonConstants.java b/oss-common/src/main/java/cn/axzo/oss/common/constans/CommonConstants.java index a8e2922..c922fe5 100644 --- a/oss-common/src/main/java/cn/axzo/oss/common/constans/CommonConstants.java +++ b/oss-common/src/main/java/cn/axzo/oss/common/constans/CommonConstants.java @@ -18,7 +18,10 @@ public abstract class CommonConstants { */ public static final int ONE = 1; - + /** + * app端oss bucketName:axzo-pro + */ + public static final String APP_PRO_BUCKET_NAME = "axzo-pro"; /** * 是否删除 diff --git a/oss-integration/src/main/java/cn/axzo/oss/integration/s3/client/AliOssAppProClient.java b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/client/AliOssAppProClient.java new file mode 100644 index 0000000..ed9b343 --- /dev/null +++ b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/client/AliOssAppProClient.java @@ -0,0 +1,57 @@ +package cn.axzo.oss.integration.s3.client; + + +import cn.axzo.oss.common.enums.CodeEnum; +import cn.axzo.oss.common.exception.S3Exception; +import cn.axzo.oss.common.utils.Utility; +import cn.axzo.oss.integration.s3.base.OssClientBase; +import cn.azxo.framework.common.utils.LogUtil; +import com.aliyun.oss.OSS; +import com.aliyun.oss.OSSClientBuilder; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +/** + * @program: oss + * @description: 阿里云服务客户端(用于兼容app端阿里云oss accessKeyId和secretAccessKey) + * @author: mr.jie + * @date: 2021-07-29 15:49 + **/ +@Component +@Slf4j +public class AliOssAppProClient implements OssClientBase { + + private static final String APP_PRO_ACCESS_KEY_ID = "LTAI4GHX7wnnpcp94Vu7JGGs"; + private static final String APP_PRO_ACCESS_KEY_SECRET = "8X5njFjCuUq1XNKkrz1rLV9xv1Mj3J"; + private static final String APP_PRO_ENDPOINT = "https://oss-cn-hangzhou.aliyuncs.com"; + + private volatile static OSS instance = null; + + public OSS getClient() { + if (Utility.objIsNull(instance)) { + throw new S3Exception(CodeEnum.S3_CLIENT_NULL.getCode(), "oss客户端未初始化"); + } + return instance; + } + + + @PostConstruct + @Override + public void initClient() { + log.info("initClient endpoint = {}, accessKeyId = {},secretAccessKey = {}", APP_PRO_ENDPOINT, APP_PRO_ACCESS_KEY_ID, APP_PRO_ACCESS_KEY_SECRET); + try { + instance = new OSSClientBuilder().build(APP_PRO_ENDPOINT, APP_PRO_ACCESS_KEY_ID, APP_PRO_ACCESS_KEY_SECRET); + } catch (Exception e) { + instance = null; + LogUtil.error("initClient error = {}", e); + } + } + + @Override + public String getEndpoint() { + return APP_PRO_ENDPOINT; + } + +} diff --git a/oss-integration/src/main/java/cn/axzo/oss/integration/s3/impl/AliOssServiceImpl.java b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/impl/AliOssServiceImpl.java index 7336bb6..07e68b1 100644 --- a/oss-integration/src/main/java/cn/axzo/oss/integration/s3/impl/AliOssServiceImpl.java +++ b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/impl/AliOssServiceImpl.java @@ -1,9 +1,9 @@ package cn.axzo.oss.integration.s3.impl; import cn.axzo.oss.integration.s3.AliOssService; +import cn.axzo.oss.integration.s3.client.AliOssAppProClient; import cn.axzo.oss.integration.s3.client.AliOssClient; import cn.azxo.framework.common.utils.LogUtil; -import com.aliyun.oss.ClientException; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSException; import com.aliyun.oss.model.GetObjectRequest; @@ -18,9 +18,10 @@ import org.springframework.web.multipart.MultipartFile; import java.io.FilterInputStream; import java.io.InputStream; -import java.io.UnsupportedEncodingException; import java.net.URLEncoder; +import static cn.axzo.oss.common.constans.CommonConstants.APP_PRO_BUCKET_NAME; + /** * @program: oss * @description: 阿里oss服务 @@ -34,6 +35,9 @@ public class AliOssServiceImpl implements AliOssService { @Autowired private AliOssClient aliOssClient; + @Autowired + private AliOssAppProClient aliOssAppProClient; + /** * upload file */ @@ -99,6 +103,9 @@ public class AliOssServiceImpl implements AliOssService { @Override public InputStream downloadFile(String bucket, String tgtFileKey, String style) { OSS client = aliOssClient.getClient(); + if (bucket.contains(APP_PRO_BUCKET_NAME)) { + client = aliOssAppProClient.getClient(); + } GetObjectRequest request = new GetObjectRequest(bucket, tgtFileKey); if (StringUtils.isNotEmpty(style)) { request.setProcess(style); diff --git a/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java b/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java index 0d15914..05daf41 100644 --- a/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java +++ b/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java @@ -35,6 +35,8 @@ import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; +import static cn.axzo.oss.common.constans.CommonConstants.APP_PRO_BUCKET_NAME; + /** * @Author admin * @Description @@ -45,16 +47,18 @@ import java.util.stream.Collectors; @Slf4j public class FileServiceImpl implements FileService { - private static String FILE_UPLOAD_CODE = "OSS_FILE_UPLOAD"; - private static String FILE_UPLOAD_NAME = "文件上传"; - private static String APPCODE_FACE = "face"; - private static String SCENE_FACE = "face"; - private static String APPCODE_IDCARD = "idcard"; - private static String SCENE_IDCARD = "idcard"; - private static String APPCODE_BANKCARD = "bankcard"; - private static String SCENE_BANKCARD = "bankcard"; + private static final String FILE_UPLOAD_CODE = "OSS_FILE_UPLOAD"; + private static final String FILE_UPLOAD_NAME = "文件上传"; + private static final String APPCODE_FACE = "face"; + private static final String SCENE_FACE = "face"; + private static final String APPCODE_IDCARD = "idcard"; + private static final String SCENE_IDCARD = "idcard"; + private static final String APPCODE_BANKCARD = "bankcard"; + private static final String SCENE_BANKCARD = "bankcard"; - private static String IS_URL = "https://"; + private static final String IS_URL = "https://"; + + private static final String HTTP_COM = ".com/"; @Autowired private FileManager fileManager; @@ -96,8 +100,9 @@ public class FileServiceImpl implements FileService { log.warn("delete file is null,url = {}, urlMd5 = {}", dto.getUrl(), urlMd5); return; } - String tgtFileKey = Utility - .generateFileKey(file.getDirectory(), file.getFileUuid(), file.getFileFormat()); + //String tgtFileKey = Utility.generateFileKey(file.getDirectory(), file.getFileUuid(), file.getFileFormat()); + //兼容app端oss历史上传文件的url处理 + String tgtFileKey = file.getFileUrl().substring(file.getFileUrl().indexOf(".com/") + 5); log.debug("delete tgtFileKey = {}", tgtFileKey); boolean deleteFlag = fileManager.delete(file.getBucketName(), tgtFileKey); log.info("delete deleteFlag = {}", deleteFlag); @@ -153,10 +158,16 @@ public class FileServiceImpl implements FileService { log.warn("file download is null, fileKey = {}", fileKey); BizException.error(Utility.objIsNotNull(file), CodeEnum.FILE_NOT_FOUND); } - String tgtFileKey = Utility - .generateFileKey(file.getDirectory(), file.getFileUuid(), file.getFileFormat()); + //String tgtFileKey = Utility.generateFileKey(file.getDirectory(), file.getFileUuid(), file.getFileFormat()); + //兼容app端oss历史上传文件的url处理 + String tgtFileKey = file.getFileUrl().substring(file.getFileUrl().indexOf(".com/") + 5); log.info("file download tgtFileKey = {}", tgtFileKey); - InputStream fileStream = fileManager.downloadFile(file.getBucketName(), tgtFileKey, dto.getStyle()); + String bucketName = file.getBucketName(); + if (file.getFileUrl().contains(APP_PRO_BUCKET_NAME)) { + //兼容处理,支持app端bucketName:axzo-pro + bucketName = APP_PRO_BUCKET_NAME; + } + InputStream fileStream = fileManager.downloadFile(bucketName, tgtFileKey, dto.getStyle()); return setFileDownloadResponse(file, fileStream); } From 82be5cf601bf79ad209ecc88c59a6aa59ebc4eb9 Mon Sep 17 00:00:00 2001 From: tianliyong Date: Tue, 20 Dec 2022 17:05:23 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=85=BC=E5=AE=B9app?= =?UTF-8?q?=E7=AB=AF=E5=8E=86=E5=8F=B2=E6=95=B0=E6=8D=AE=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/axzo/oss/service/impl/FileServiceImpl.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java b/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java index 05daf41..8ce72c3 100644 --- a/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java +++ b/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java @@ -104,7 +104,12 @@ public class FileServiceImpl implements FileService { //兼容app端oss历史上传文件的url处理 String tgtFileKey = file.getFileUrl().substring(file.getFileUrl().indexOf(".com/") + 5); log.debug("delete tgtFileKey = {}", tgtFileKey); - boolean deleteFlag = fileManager.delete(file.getBucketName(), tgtFileKey); + String bucketName = file.getBucketName(); + if (file.getFileUrl().contains(APP_PRO_BUCKET_NAME)) { + //兼容处理,支持app端bucketName:axzo-pro + bucketName = APP_PRO_BUCKET_NAME; + } + boolean deleteFlag = fileManager.delete(bucketName, tgtFileKey); log.info("delete deleteFlag = {}", deleteFlag); if (deleteFlag) { File updateFile = new File();