使用 itext 在亚马逊 s3 上存储 pdf 文件

kse*_*now 0 java spring itext amazon-s3 amazon-ec2

这是我第一次使用 amazon s3,我想存储我在 java spring 中使用 itext 创建的 pdf 文件。

代码(托管在 ec2 实例上)创建了一个我想存储在某处的 pdf。我正在探索亚马逊 s3 是否可以保存这些文件。最后我也想找回它。这可以使用 itext 和 java spring 来完成吗?任何例子都会很棒。

Aji*_*man 6

将文件上传到 Amazon s3 您需要使用putObjectAmazonS3Client 类的方法,如下所示:

    AWSCredentials credentials = new BasicAWSCredentials(appId,appSecret);
    AmazonS3 s3Client = new AmazonS3Client(credentials);

    String bucketPath = "YOUR_BUCKET_NAME/FOLDER_INSIDE_BUCKET";
    InputStream is = new FileInputStream("YOUR_PDF_FILE_PATH");
    ObjectMetadata meta = new ObjectMetadata();
    meta.setContentLength(is.available());
    s3Client.putObject(new PutObjectRequest(bucketPath,"YOUR_FILE.pdf", is, meta).withCannedAcl(CannedAccessControlList.Private));
Run Code Online (Sandbox Code Playgroud)

要从 S3 获取文件,您需要生成一个预签名的 URL 以从 S3 访问私有文件,或者如果您的文件是公开的,那么您可以通过点击浏览器中的文件链接直接访问您的文件,您的文件的链接将在 AWS S3 控制台中可用。

我们也在CannedAccessControlList.Private上面的上传代码中指定,这意味着我们将文件的权限设为私有所以我们需要生成预签名的 URL 来访问文件,如下所示:

  AWSCredentials credentials = new BasicAWSCredentials(appId,appSecret);
  AmazonS3 s3Client = new AmazonS3Client(credentials);

  GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest("YOUR_BUCKET_NAME", "FOLDER_INSIDE_BUCKET/YOUR_FILE.pdf");

  generatePresignedUrlRequest.setMethod(HttpMethod.GET); 

  Date expiration = new Date();
  long milliSeconds = expiration.getTime();
  milliSeconds += 1000 * 60 * 60; // Add 1 hour.
  expiration.setTime(milliSeconds);
  generatePresignedUrlRequest.setExpiration(expiration);
  URL url = s3Client.generatePresignedUrl(generatePresignedUrlRequest); 
  String finalUrl  = url.toString();  
Run Code Online (Sandbox Code Playgroud)