我正在实现一个帮助程序类来处理从我的 Web 应用程序到 AWS S3 存储的传输。
在我的类(class)的第一个版本中,我直接使用 AmazonS3Client
来处理上传和下载,但现在我发现了 TransferManager
并且我想重构我的代码使用这个。
问题是在我的下载方法中,我以 byte[]
的形式返回存储的文件。 TransferManager 只有使用 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
实例?
最佳答案
TransferManager
使用 File
对象来支持并行下载文件时的文件锁定等功能。不能直接使用 OutputStream
。如果您的要求很简单,例如一次从 S3 下载一个小文件,请坚持使用 getObject
。
否则,您可以使用 File.createTempFile
创建一个临时文件,并在下载完成后将内容读入字节数组。
关于java - 下载文件流而不是文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37255963/