如何在Spring Boot中将S3对象转换为资源?

3

我有一个S3Object类型的视频。

我正试图使用以下代码将其转换为Resource。

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个回答

1
如何从私有桶中加载 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);


0

看起来在传递到InputStreamResource之前,您的流被某个方法使用了。或者更好的方法是,如果您的S3 URL是公开可访问的,那么尝试这样做。

@Autowired
ResourceLoader resourceLoader;

在方法中使用如下。

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

1
我使用ByteArrayResource而不是InputStreamResource成功地完成了这个任务。ByteArrayResource允许从流中多次读取。 - Rosi R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接