java - 下载文件流而不是文件

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

我正在实现一个帮助程序类来处理从我的 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/

相关文章:

java - 写一个简单的程序来使用堆栈

java - 使用 Java/Mockito/PowerMockito 实例化具有私有(private)构造函数的类

powershell - 如何使用 PowerShell 在本地备份 S3 存储桶的内容

java - 输入数组而不知道其大小

java - 停止使用@Scheduled注释的计时器

amazon-web-services - 使用 CDK 部署时,Lambda 无法从外部文件夹中找到模块

amazon-web-services - 使用 HTTP 代理访问 AWS API Gateway 中的 cloudfront-viewer-country header ?

mysql - 在不同的 AWS 区域设置多主 MySQL 集群

ruby-on-rails - 如何使用 s3 图像 url 删除 s3 对象?

php - 如何授予多个用户访问单个 Amazon S3 账户的权限并确定谁添加了文件?