如何将pdf保存到Aws s3



我正在使用PDFbox合并代码中的两个pdf文件,然后我想将结果(合并的文件(存储到AWS s3 bucket中。我试图将pdf文件直接存储到s3,而不在本地保存在我的系统中,但我无法找到任何方法。

我的代码合并两个pdf-

PDFMergerUtility pdfMergerUtility = new PDFMergerUtility();
String FinalFileName= "Merged.pdf";
pdfMergerUtility.setDestinationFileName(FinalFileName);
pdfMergerUtility.addSource(FileOne);
pdfMergerUtility.addSource(FileTwo);
pdfMergerUtility.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly());
//To upload over s3 
String fileNameIWantInS3 = "myfile.pdf";
s3.putObject(BucketName, fileNameIWantInS3, ??); //Stuck here

我不想在我的服务器上制作一个文件,而是想直接把它放在s3上,我如何修改这个代码来上传Merged.pdf到s3 bucket。上面的代码只是我陷入困境的一部分。我使用File.createTempFile创建了FileOne和FileTwo。

整个想法是合并两个文件,并将最终文件放在s3上,而无需在服务器上制作其物理副本!请帮忙。

要上传文件,需要传递字节数组或输入流,下面使用字节数组:

public void saveFileToS3(String yourBucketName,String pathAws, String folderName) {
PDFMergerUtility pdfMergerUtility = new PDFMergerUtility();
String FinalFileName= "Merged.pdf";
pdfMergerUtility.setDestinationFileName(FinalFileName);
pdfMergerUtility.addSource(FileOne);
pdfMergerUtility.addSource(FileTwo);         
pdfMergerUtility.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly());
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
pdfMergerUtility.setDestinationStream(byteArrayOutputStream);  
AmazonS3 s3Client = AwsUtil.s3Authentication();
PutObjectRequest objectRequest = PutObjectRequest.builder()
.bucket(yourBucketName)
.key(folderName+"/"+pathAws)//pathAws: path on S3 where the file will be saved
.build();
//convert it into a byte array
byte[] pdfBytes = byteArrayOutputStream.toByteArray()  
CompletableFuture<PutObjectResponse> future = 
s3Client.putObject(objectRequest,AsyncRequestBody.fromBytes(pdfBytes));
future.whenComplete((resp, err) -> {
try {
if (resp != null) {
System.out.println("Object uploaded. Details: " + resp);
} else {
err.printStackTrace();
}
} finally {
s3Client.close();
}
});    
future.join();   
}

最新更新