如何在SpringBoot中将S3对象转换为Resource?

时间:2018-10-23 10:30:17

标签: java spring-boot

我有一个S3Object类型的视频。

我正在尝试使用以下代码将其转换为资源。

Resource resource = new InputStreamResource(video.getObjectContent());

我收到以下错误

"InputStream has already been read - do not use InputStreamResource if a stream needs to be read multiple times"

是否可以直接读取S3Object作为资源?

我该如何纠正?

2 个答案:

答案 0 :(得分:0)

看起来像在传入InputStreamResource之前,您的流已被某些方法使用。如果您的s3网址可以公开访问,则可以采用更好的方法,或者那样尝试

@Autowired
ResourceLoader resourceLoader;

在方法中使用如下。

   Resource resource = resourceLoader.getResource(<s3 url>)

答案 1 :(得分:0)

如何从私有存储桶加载 S3 存储桶文件:

//Make sure your credentials are in the aws credentials file or use .withCredentials()
AmazonS3 s3client = AmazonS3ClientBuilder
                .standard()
                .withRegion("us-east-1")
                .build();

if(!s3client.doesBucketExistV2(adfsProperties.keystoreBucket())) {
    throw new Exception.... //bucket not found
}

S3Object s3object = s3client.getObject("bucket-name", "file-name");
S3ObjectInputStream inputStream = s3object.getObjectContent();

Resource r = new InputStreamResource(inputStream);