29

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

4

4 回答 4

54

使用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"); 
于 2012-11-01T19:52:20.853 回答
4

从 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()
于 2020-05-21T16:53:26.130 回答
1

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

S3Object s3object = s3.getObject(new GetObjectRequest(bucketName, key));
S3ObjectInputStream inputStream = s3object.getObjectContent();
StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
于 2020-02-17T08:05:16.820 回答
0

这是最好的做法。

S3Object object = s3.getObject("bucket", "key"); 
byte[] byteArray = IOUtils.toByteArray(object.getObjectContent());
于 2021-04-21T23:42:44.760 回答