将文件下载到流而不是文件

时间:2016-05-16 14:10:27

标签: java amazon-web-services amazon-s3 aws-sdk

我正在实施一个帮助程序类来处理从我的Web应用程序到AWS S3存储的传输。

在我班级的第一个版本中,我直接使用AmazonS3Client来处理上传和下载,但现在我发现TransferManager并且我想重构我的代码以使用它。

问题是在我的下载方法中,我以byte[]的形式返回存储的文件。而转发管理器只有使用File作为下载目标的方法(例如download(GetObjectRequest getObjectRequest, File file))。

我之前的代码是这样的:

GetObjectRequest getObjectRequest = new GetObjectRequest(bucket, key);
S3Object s3Object = amazonS3Client.getObject(getObjectRequest);
S3ObjectInputStream objectInputStream = s3Object.getObjectContent();
byte[] bytes = IOUtils.toByteArray(objectInputStream);

有没有办法以同样的方式使用TransferManager,还是应该继续使用AmazonS3Client个实例?

1 个答案:

答案 0 :(得分:3)

TransferManager使用File个对象来支持并行下载文件时的文件锁定等内容。直接使用OutputStream是不可能的。如果您的要求很简单,例如一次从S3下载一些小文件,请坚持使用getObject

否则,您可以使用File.createTempFile创建临时文件,并在下载完成后将内容读入字节数组。