下载文件流而不是文件

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 创建一个临时文件,并在下载完成后将内容读入字节数组。