From 02bc8014c82946377a70994d3551b3845bd9da34 Mon Sep 17 00:00:00 2001 From: ajaxfan <909938737@qq.com> Date: Thu, 8 Apr 2021 17:19:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9sdk=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E4=B8=AD=E5=BF=83=E6=8E=A5=E5=8F=A3=EF=BC=8C=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=9F=BA=E4=BA=8E=E5=AF=B9=E8=B1=A1id=E7=9A=84=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E5=92=8C=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sdk/api/DefaultAttachmentClient.java | 105 +++++++++++------- .../sdk/convertor/ModelConvertor.java | 23 +--- .../DocumentCenterServiceFallback.java | 5 + .../sdk/service/DocumentCenterService.java | 11 +- .../cloud/attachment/sdk/vo/SysStorageVO.java | 3 - 5 files changed, 80 insertions(+), 67 deletions(-) diff --git a/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/api/DefaultAttachmentClient.java b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/api/DefaultAttachmentClient.java index 254993b..06c783c 100644 --- a/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/api/DefaultAttachmentClient.java +++ b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/api/DefaultAttachmentClient.java @@ -56,6 +56,17 @@ public class DefaultAttachmentClient implements AttachmentClient { return Optional.of(String.format("{\"id\":\"%s\"}", IdUtil.getSnowflake(23, 16).nextIdStr())); } + /** + * 查询指定Id文件的详细信息 + * + * @param objectId + * @return + */ + @Override + public Optional findByObjectId(String objectId) { + return modelConvertor.toAttachmentEntity(documentCenterService.getObjectDetail(objectId)); + } + /** * 根据业务id列表查询详单 * @@ -64,9 +75,9 @@ public class DefaultAttachmentClient implements AttachmentClient { */ @Override public Optional findByBusinessId(List businessIdList) { - log.debug("query bids: {}", businessIdList); + log.debug("query by bids: {}", businessIdList); String json = documentCenterService.fetchDetails(businessIdList); - log.debug("fetch content: {}", json); + log.debug("document center return: {}", json); AttachmentDetail detail = new AttachmentDetail(); @@ -82,17 +93,6 @@ public class DefaultAttachmentClient implements AttachmentClient { return Optional.of(detail); } - /** - * 查询指定Id文件的详细信息 - * - * @param objectId - * @return - */ - @Override - public Optional findByObjectId(String objectId) { - return modelConvertor.toAttachmentEntity(documentCenterService.getObjectDetail(objectId)); - } - /** * 通过对象id下载附件 * @@ -101,7 +101,7 @@ public class DefaultAttachmentClient implements AttachmentClient { */ @Override public Optional downloadFileByObjectId(String objectId) { - return modelConvertor.toByteArray(documentCenterService.getObjectDetail(objectId)); + return Optional.ofNullable(documentCenterService.download(objectId)); } /** @@ -112,6 +112,7 @@ public class DefaultAttachmentClient implements AttachmentClient { */ @Override public Optional downloadFilesByBusinessId(String businessId) { + /** 文档中心不提提供通过业务id下载。因此,需要先通过业务id获取对象列表,然后下载每一个对象资源 */ Optional op = findByBusinessId(Arrays.asList(businessId)); if (op.isPresent()) { @@ -121,19 +122,12 @@ public class DefaultAttachmentClient implements AttachmentClient { if (list.size() == 1) { return downloadFileByObjectId(list.get(0).getId()); } - // 如果大于1个则下载返回压缩包数据流 + // 如果大于1个则返回压缩包数据流 else if (list.size() > 1) { try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { - try (ZipOutputStream zout = new ZipOutputStream(out)) { - list.stream().forEach(data -> { - try { - zout.putNextEntry(new ZipEntry(data.getFilename()));// 文件项名称 - zout.write(downloadFileByObjectId(data.getId()).get());// 文件数据流 - } catch (IOException e) { - log.error(e.getMessage()); - } - }); - } + // 创建压缩文件流 + createCompressionStream(list, out); + return Optional.ofNullable(out.toByteArray()); } catch (IOException e) { log.error(e.getMessage()); @@ -144,6 +138,25 @@ public class DefaultAttachmentClient implements AttachmentClient { } /** + * 下载原始对象格式(包含原始文件的基本信息) + * + * @param objectId + * @return + */ + @Override + public Optional downloadOriginalFileByObjectId(String objectId) { + // 获取对象文件原数据 + Optional op = modelConvertor.toDownloadEntity(documentCenterService.getObjectDetail(objectId)); + // 设置文件流 + op.ifPresent(entity -> { + entity.setStream(documentCenterService.download(objectId)); + }); + return op; + } + + /** + * 下载业务资源 + * * @param businessId * @return */ @@ -158,19 +171,12 @@ public class DefaultAttachmentClient implements AttachmentClient { if (list.size() == 1) { return downloadOriginalFileByObjectId(list.get(0).getId()); } - // 如果大于1个则下载返回压缩包数据流 + // 如果大于1个则返回压缩包数据流 else if (list.size() > 1) { try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { - try (ZipOutputStream zout = new ZipOutputStream(out)) { - list.stream().forEach(data -> { - try { - zout.putNextEntry(new ZipEntry(data.getFilename()));// 文件项名称 - zout.write(downloadFileByObjectId(data.getId()).get());// 文件数据流 - } catch (IOException e) { - log.error(e.getMessage()); - } - }); - } + // 创建压缩文件流 + createCompressionStream(list, out); + return Optional.ofNullable(new DownloadEntity() .setFilename(String.format("%s.zip", UUID.randomUUID())).setStream(out.toByteArray())); } catch (IOException e) { @@ -181,11 +187,6 @@ public class DefaultAttachmentClient implements AttachmentClient { return Optional.empty(); } - @Override - public Optional downloadOriginalFileByObjectId(String objectId) { - return modelConvertor.toDownloadEntity(documentCenterService.getObjectDetail(objectId)); - } - /** * 文件上传 * @@ -267,4 +268,26 @@ public class DefaultAttachmentClient implements AttachmentClient { }); } + /** + * 创建压缩文件流 + * + * @param list + * @param out + * @throws IOException + */ + private void createCompressionStream(List list, ByteArrayOutputStream out) throws IOException { + try (ZipOutputStream zout = new ZipOutputStream(out)) { + list.forEach(data -> { + downloadFileByObjectId(data.getId()).ifPresent(buffer -> { + try { + zout.putNextEntry(new ZipEntry(data.getFilename()));// 文件项名称 + zout.write(buffer);// 文件数据流 + } catch (IOException e) { + log.error(e.getMessage()); + } + }); + }); + } + } + } diff --git a/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/convertor/ModelConvertor.java b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/convertor/ModelConvertor.java index c22a4d8..578ca3a 100644 --- a/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/convertor/ModelConvertor.java +++ b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/convertor/ModelConvertor.java @@ -78,26 +78,6 @@ public class ModelConvertor { }); } - /** - * @param json - * @return - */ - public Optional toByteArray(String json) { - return Optional.ofNullable(json).map(content -> { - try { - Optional op = tpDownPO(content); - - if (op.isPresent()) { - return op.get().getFileStream(); - } - } catch (JsonProcessingException e) { - log.error(json); - log.error(e.getMessage()); - } - return null; - }); - } - /** * @param json * @return @@ -111,8 +91,7 @@ public class ModelConvertor { if (op.isPresent()) { SysStorageVO vo = op.get(); entity = new DownloadEntity(); - entity.setFilename(URLEncoder.DEFAULT.encode(vo.getOriginalName(), Charset.forName("UTF-8"))) - .setStream(vo.getFileStream()); + entity.setFilename(URLEncoder.DEFAULT.encode(vo.getOriginalName(), Charset.forName("UTF-8"))); } } catch (JsonProcessingException e) { log.error(json); diff --git a/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/fallback/DocumentCenterServiceFallback.java b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/fallback/DocumentCenterServiceFallback.java index 0946b94..ee0139d 100644 --- a/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/fallback/DocumentCenterServiceFallback.java +++ b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/fallback/DocumentCenterServiceFallback.java @@ -30,4 +30,9 @@ public class DocumentCenterServiceFallback implements DocumentCenterService { return null; } + @Override + public byte[] download(String fileId) { + return null; + } + } diff --git a/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/service/DocumentCenterService.java b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/service/DocumentCenterService.java index 89a242d..766cab0 100644 --- a/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/service/DocumentCenterService.java +++ b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/service/DocumentCenterService.java @@ -28,7 +28,16 @@ public interface DocumentCenterService { * @param fileId * @return */ - @RequestMapping(method = RequestMethod.POST, value = "v1.0/files/downloadFileAllStream") + @RequestMapping(method = RequestMethod.GET, value = "v1.0/files/download") + byte[] download(@RequestParam("fileId") String fileId); + + /** + * 通过附件id查询明细 + * + * @param fileId + * @return + */ + @RequestMapping(method = RequestMethod.POST, value = "v1.0/files/findById") String getObjectDetail(@RequestParam("fileId") String fileId); /** diff --git a/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/vo/SysStorageVO.java b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/vo/SysStorageVO.java index cafc118..7261f3e 100644 --- a/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/vo/SysStorageVO.java +++ b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/vo/SysStorageVO.java @@ -14,9 +14,6 @@ public class SysStorageVO { /* 业务id */ private String objectId; - /* 文件流 */ - private byte[] fileStream; - /* 文件唯一标识 */ private String fileName;