【问题标题】:How to download s3 object directly into memory in java如何在java中将s3对象直接下载到内存中
【发布时间】:2012-11-01 14:51:34
【问题描述】:

是否可以将Java 中的S3object 直接下载到内存中,并在我完成任务后将其删除?

【问题讨论】:

    标签: amazon-s3 task


    【解决方案1】:

    像这样使用AWS SDK for JavaApache Commons IO

    //import org.apache.commons.io.IOUtils
    
    AmazonS3 s3  = new AmazonS3Client(credentials);  // anonymous credentials are possible if this isn't your bucket
    S3Object object = s3.getObject("bucket", "key"); 
    byte[] byteArray = IOUtils.toByteArray(object.getObjectContent());
    

    不确定“将其删除”是什么意思,但IOUtils 将在对象的输入流完成将其转换为字节数组后关闭它。如果您的意思是要从 s3 中删除该对象,那很简单:

    s3.deleteObject("bucket", "key"); 
    

    【讨论】:

    • 感谢您的帮助!这将需要使用其他库。如果我循环通过输入流来获取字节数组不是更好吗?
    • 您现在可以在没有org.apache.commons.io 的情况下执行此操作。 AWS SDK 在其自己的 IOUtils 中提供此方法:import com.amazonaws.util.IOUtils;
    【解决方案2】:

    从 AWS JAVA SDK 2 开始,您可以使用 ReponseTransformer 将响应转换为不同的类型。 (见javadoc)。

    以下是以字节为单位获取对象的示例

    GetObjectRequest request = GetObjectRequest.builder().bucket(bucket).key(key).build()
    ResponseBytes<GetObjectResponse> result = bytess3Client.getObject(request, ResponseTransformer.toBytes())
    
    // to get the bytes
    result.asByteArray()
    

    【讨论】:

      【解决方案3】:

      例如,将文件数据转换为字符串:

      S3Object s3object = s3.getObject(new GetObjectRequest(bucketName, key));
      S3ObjectInputStream inputStream = s3object.getObjectContent();
      StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
      

      【讨论】:

        【解决方案4】:

        这是最好的做法。

        S3Object object = s3.getObject("bucket", "key"); 
        byte[] byteArray = IOUtils.toByteArray(object.getObjectContent());
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-06-10
          • 2020-12-23
          • 2021-08-13
          • 1970-01-01
          • 1970-01-01
          • 2019-01-20
          • 2017-10-17
          相关资源
          最近更新 更多