From efad7fa66a973d36bbf5f3aa2b624989a8fa3716 Mon Sep 17 00:00:00 2001 From: Corina Olariu Date: Tue, 8 Aug 2023 20:00:28 +0300 Subject: [PATCH] RED-6864 - Optimization of Upload and Download for Large Files in Azure Blob Storage and AWS S3/MinIO update to the new version for storage-commons replace getObject from storageService with downloadTo update tests --- redaction-report-service-v1/pom.xml | 2 +- .../v1/server/storage/ReportStorageService.java | 14 ++++++++++++-- .../utils/FileSystemBackedStorageService.java | 14 +++++++++++++- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/redaction-report-service-v1/pom.xml b/redaction-report-service-v1/pom.xml index f8f70b1..41f2822 100644 --- a/redaction-report-service-v1/pom.xml +++ b/redaction-report-service-v1/pom.xml @@ -33,7 +33,7 @@ com.iqser.red platform-commons-dependency - 2.6.0 + 2.7.0 import pom diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/storage/ReportStorageService.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/storage/ReportStorageService.java index 1aabe64..01061e4 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/storage/ReportStorageService.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/storage/ReportStorageService.java @@ -1,6 +1,8 @@ package com.iqser.red.service.redaction.report.v1.server.storage; import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.util.List; import java.util.UUID; @@ -43,7 +45,7 @@ public class ReportStorageService { public byte[] getReportTemplate(String storageId) { try { - return IOUtils.toByteArray(storageService.getObject(TenantContext.getTenantId(), storageId).getInputStream()); + return IOUtils.toByteArray(getObject(TenantContext.getTenantId(), storageId)); } catch (IOException e) { throw new RuntimeException("Could not get report template."); } @@ -53,7 +55,7 @@ public class ReportStorageService { @SneakyThrows public byte[] getStoredObjectBytes(String dossierId, String fileId, FileType fileType) { - return IOUtils.toByteArray(storageService.getObject(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, fileType)).getInputStream()); + return IOUtils.toByteArray(getObject(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, fileType))); } @@ -62,4 +64,12 @@ public class ReportStorageService { return storageService.objectExists(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, fileType)); } + @SneakyThrows + public FileInputStream getObject(String tenantId, String storageId) { + File destFile = File.createTempFile("destFile", ".data"); + destFile.deleteOnExit(); + storageService.downloadTo(tenantId, storageId, destFile); + return new FileInputStream(destFile); + } + } diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/utils/FileSystemBackedStorageService.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/utils/FileSystemBackedStorageService.java index f28c274..d877d88 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/utils/FileSystemBackedStorageService.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/utils/FileSystemBackedStorageService.java @@ -31,7 +31,6 @@ public class FileSystemBackedStorageService implements StorageService { @SneakyThrows - @Override public InputStreamResource getObject(String tenantId, String objectId) { var res = dataMap.get(objectId); @@ -42,6 +41,18 @@ public class FileSystemBackedStorageService implements StorageService { } + @SneakyThrows + @Override + public void downloadTo(String tenantId, String objectId, File destinationFile) { + + var res = dataMap.get(objectId); + if (res == null) { + throw new StorageObjectDoesNotExist(new RuntimeException()); + } + IOUtils.copy(new FileInputStream(res), new FileOutputStream(destinationFile)); + + } + @Override public void deleteObject(String tenantId, String objectId) { @@ -118,4 +129,5 @@ public class FileSystemBackedStorageService implements StorageService { this.dataMap.clear(); } + }