我正在实施一个帮助程序类来处理从我的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
个实例?
答案 0 :(得分:3)
TransferManager
使用File
个对象来支持并行下载文件时的文件锁定等内容。直接使用OutputStream
是不可能的。如果您的要求很简单,例如一次从S3下载一些小文件,请坚持使用getObject
。
否则,您可以使用File.createTempFile
创建临时文件,并在下载完成后将内容读入字节数组。