From c3b8c69661b36376df164aa25b00f132b9edb241 Mon Sep 17 00:00:00 2001 From: jinno Yun Date: Sun, 6 Oct 2024 16:45:46 +0900 Subject: [PATCH] =?UTF-8?q?#21=20Refactor=20:=20=EC=83=88=20=EC=9D=B8?= =?UTF-8?q?=EC=A6=9D=EC=84=9C(pdf)=20=EC=97=85=EB=A1=9C=EB=93=9C=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=98=88=EC=99=B8=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EC=96=B8=EC=B2=B4=ED=81=AC=20=EC=98=88=EC=99=B8?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../compileJava/previous-compilation-data.bin | Bin 2183005 -> 2183005 bytes .../controller/S3StorageController.java | 10 +-- .../s3Storage/service/S3StorageService.java | 84 ++++++++++++------ 3 files changed, 60 insertions(+), 34 deletions(-) diff --git a/web3-credential-server/build/tmp/compileJava/previous-compilation-data.bin b/web3-credential-server/build/tmp/compileJava/previous-compilation-data.bin index 97c8c73af4f02db5a1d9f9725b3e61a53987a31b..1bd709b3377c769bdc144468513612501e3e7254 100644 GIT binary patch delta 187 zcmWm1I}QOs0D$4l>{!-wyx*^gM6FP{0C50?LL9*nh$s-zC>1IlqR=^sO(;~;sA>F) zulU^EOt?5bq~6qSZM(5o7WA-qHwN|L#Bi)}nJ>Im_YGx=)Ro8zmrN;eQWo pc;SNsKLQ9MgfJq|h$4nK5=bJ2G&0B{hdc@>qJ%OkSEH)q?hgW4OcwwE delta 187 zcmWm1y$V550KoCiaop?Ux{mK}t}@y!RwZJ#c?KqBQM%V#NO=K8c?TQ&EoD55$tZur zZ}^3KUxYY4rS=0Wa5tCUp?kcKXRF2eEsfBF+iUurIClRroXgHD8|3_iL oMhtNzkc5L2T%@6qK^8gWQ9uzTlu uploadPdf( @Parameter(description = "pdf 키값",required = true) @RequestParam String pdfKey) { Wallet wallet = walletService.getWalletById(walletId).orElseThrow(()-> new EntityNotFoundException("Wallet does not exist")); - try { - String pdfUrl = s3StorageService.uploadPdf(file, wallet,pdfInfo,pdfKey); - return ResponseEntity.ok(pdfUrl); - } catch (IOException e) { - e.printStackTrace(); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Failed to upload pdf: " + e.getMessage()); - } + String pdfUrl = s3StorageService.uploadPdf(file, wallet,pdfInfo,pdfKey); + return ResponseEntity.ok(pdfUrl); + } diff --git a/web3-credential-server/src/main/java/web3/s3Storage/service/S3StorageService.java b/web3-credential-server/src/main/java/web3/s3Storage/service/S3StorageService.java index 85f147f..8bd4ef9 100644 --- a/web3-credential-server/src/main/java/web3/s3Storage/service/S3StorageService.java +++ b/web3-credential-server/src/main/java/web3/s3Storage/service/S3StorageService.java @@ -36,47 +36,39 @@ public S3StorageService(S3Properties s3Properties, WalletRepository walletReposi this.walletRepository = walletRepository; } - public String uploadPdf(MultipartFile file, Wallet wallet,String pdfInfo,String pdfKey) throws IOException { + @Transactional + public String uploadPdf(MultipartFile file, Wallet wallet, String pdfInfo, String pdfKey) { String fileName; byte[] result; HashMap metadata = new HashMap<>(); int nowPage = 1; - //첫 등록일때 => 생성해줘야함 - if (wallet.getPdfUrl() == null){ - fileName = (file.getSize() > 0) ? getFileName(wallet): getEmptyFilename(wallet); - - // PDF 파일 확장자 검증 - //validatePdfFile(fileName); - result = (file.getSize() > 0) ? file.getBytes():createEmptyPdf(); - - } - else{ - //이미 있을시 -> pdf 병합 + // 첫 등록일 때 => 생성해줘야 함 + if (wallet.getPdfUrl() == null) { + fileName = (file.getSize() > 0) ? getFileName(wallet) : getEmptyFilename(wallet); + result = (file.getSize() > 0) ? getFileBytes(file) : createEmptyPdf(); + } else { + // 이미 있을 시 -> PDF 병합 String destination = wallet.getPdfUrl(); fileName = extractKeyFromUrl(destination); - byte[] first = getPdf(destination).readAllBytes();//원래 파일 - byte[] second = (file.getSize() > 0) ? file.getBytes() : createEmptyPdf(); //뒤에 들어온 파일 + byte[] first = new byte[0]; // 원래 파일 + first = getBytes(destination); + byte[] second = (file.getSize() > 0) ? getFileBytes(file) : createEmptyPdf(); // 뒤에 들어온 파일 - nowPage = getPdfPageCount(first)+1; + nowPage = getPdfPageCount(first) + 1; result = mergePdfs(first, second); - metadata= decodeMetadata(getPdfMetadata(fileName)); + metadata = decodeMetadata(getPdfMetadata(fileName)); } String page = "page-" + nowPage; // 키 설정 String value = pdfInfo + ":" + pdfKey; - metadata.put(page,value); // 키-값 쌍으로 추가 + metadata.put(page, value); // 키-값 쌍으로 추가 log.info("metadata = {}", metadata); - try { - uploadToS3(fileName, metadata, result); - - } catch (S3Exception e) { - throw new IOException("Failed to upload pdf to S3: " + e.getMessage()); - } + uploadPdf(fileName, metadata, result); wallet.updatePdfUrl(getpdfUrl(fileName)); walletRepository.saveAndFlush(wallet); @@ -84,6 +76,35 @@ public String uploadPdf(MultipartFile file, Wallet wallet,String pdfInfo,String return getpdfUrl(fileName); } + + + private byte[] getBytes(String destination) { + byte[] first; + try { + first = getPdf(destination).readAllBytes(); + } catch (IOException e) { + throw new RuntimeException(e); + } + return first; + } + + // 파일 바이트 배열을 가져오는 메서드 추가 (오류 처리 포함) + private byte[] getFileBytes(MultipartFile file) { + try { + return file.getBytes(); + } catch (IOException e) { + throw new RuntimeException("Failed to get file bytes: " + e.getMessage(), e); + } + } + + private void uploadPdf(String fileName, HashMap metadata, byte[] result) { + try { + uploadToS3(fileName, metadata, result); + } catch (S3Exception e) { + throw new RuntimeException("Failed to upload pdf to S3: " + e.getMessage(), e); + } + } + private void uploadToS3(String fileName, HashMap metadata, byte[] result) { HashMap encodedMetadata = new HashMap<>(); @@ -95,6 +116,7 @@ private void uploadToS3(String fileName, HashMap metadata, byte[ PutObjectRequest putRequest = PutObjectRequest.builder() .bucket(s3Properties.getS3BucketName()) .key(fileName) + .contentType("application/pdf") .metadata(encodedMetadata) .build(); @@ -111,7 +133,7 @@ private static String getEmptyFilename(Wallet wallet) { return wallet.getAddress() + "_" + System.currentTimeMillis() + "_" + "empty.pdf"; } - public byte[] mergePdfs(byte[] pdf1, byte[] pdf2) throws IOException { + public byte[] mergePdfs(byte[] pdf1, byte[] pdf2){ PDFMergerUtility merger = new PDFMergerUtility(); ByteArrayInputStream inputStream1 = new ByteArrayInputStream(pdf1); @@ -122,17 +144,23 @@ public byte[] mergePdfs(byte[] pdf1, byte[] pdf2) throws IOException { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); merger.setDestinationStream(outputStream); - merger.mergeDocuments(null); + try { + merger.mergeDocuments(null); + } catch (IOException e) { + throw new RuntimeException(e); + } return outputStream.toByteArray(); } - private byte[] createEmptyPdf() throws IOException { + private byte[] createEmptyPdf(){ try (PDDocument document = new PDDocument()) { document.addPage(new PDPage()); // 빈 페이지 추가 ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); document.save(outputStream); return outputStream.toByteArray(); + } catch (IOException e) { + throw new RuntimeException(e); } } @@ -316,9 +344,11 @@ public String getPdfKeyForPage(String pdfUrl, int pageNumber) { - public int getPdfPageCount(byte[] pdfBytes) throws IOException { + public int getPdfPageCount(byte[] pdfBytes){ try (PDDocument document = PDDocument.load(pdfBytes)) { return document.getNumberOfPages(); + } catch (IOException e) { + throw new RuntimeException(e); } }