【发布时间】:2012-11-01 14:51:34
【问题描述】:
是否可以将Java 中的S3object 直接下载到内存中,并在我完成任务后将其删除?
【问题讨论】:
是否可以将Java 中的S3object 直接下载到内存中,并在我完成任务后将其删除?
【问题讨论】:
像这样使用AWS SDK for Java 和Apache 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;
从 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()
【讨论】:
例如,将文件数据转换为字符串:
S3Object s3object = s3.getObject(new GetObjectRequest(bucketName, key));
S3ObjectInputStream inputStream = s3object.getObjectContent();
StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
【讨论】:
这是最好的做法。
S3Object object = s3.getObject("bucket", "key");
byte[] byteArray = IOUtils.toByteArray(object.getObjectContent());
【讨论】: