下载文件流而不是文件
Download file to stream instead of File
我正在实现一个帮助程序 class 来处理从我的 Web 应用程序到 AWS S3 存储的传输。
在我的 class 的第一个版本中,我直接使用 AmazonS3Client
来处理上传和下载,但现在我发现 TransferManager
并且我想重构我的代码使用这个。
问题是在我的下载方法中,我 return 以 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
创建一个临时文件,并在下载完成后将内容读入字节数组。
我正在实现一个帮助程序 class 来处理从我的 Web 应用程序到 AWS S3 存储的传输。
在我的 class 的第一个版本中,我直接使用 AmazonS3Client
来处理上传和下载,但现在我发现 TransferManager
并且我想重构我的代码使用这个。
问题是在我的下载方法中,我 return 以 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
创建一个临时文件,并在下载完成后将内容读入字节数组。