我正在阅读此文档:
http://cloud.spring.io/spring-cloud-aws/spring-cloud-aws.html
从Spring应用程序使用AWS。我对S3特别感兴趣,因此,我设置了应用程序并复制了这段代码以确保设置正常工作:
Resource resource = this.resourceLoader.getResource("s3://myBucket/rootFile.log");
WritableResource writableResource = (WritableResource) resource;
try (OutputStream outputStream = writableResource.getOutputStream()) {
outputStream.write("test".getBytes());
}
但是当我运行它时,我收到了这个错误:
java.lang.ClassCastException: org.springframework.web.context.support.ServletContextResource cannot be cast to org.springframework.core.io.WritableResource
任何想法有什么不对?这是一个设置问题?它看起来不像我,但我是新手。
答案 0 :(得分:0)
尝试将Resource类声明/转换为FileSystemResource:
FileSystemResource resource = this.resourceLoader.getResource("s3://myBucket/rootFile.log");
WritableResource writableResource = (WritableResource) resource;
try (OutputStream outputStream = writableResource.getOutputStream()) {
outputStream.write("test".getBytes());
}
答案 1 :(得分:0)
我有同样的问题,结果我使用了错误的lib。尝试从
更改依赖关系 <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-aws</artifactId>
</dependency>
要
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-aws</artifactId>
</dependency>
另外不要忘记在application.yml中添加aws配置,否则它不会启动。
cloud.aws:
region.static: your-region
credentials:
accessKey: your-key
secretKey: your-secret
希望这可以解决您的问题。
答案 2 :(得分:0)
我尝试遵循@accresse提出的解决方案,但没有成功。解决该问题的唯一方法是声明一个新的 SimpleStorageProtocolResolver
并将其作为 ProtocolResolver
添加到 DefaultResourceLoader
< / strong>。使用Spring Boot 2.1.7 e和Spring Cloud Aws 2.1.4。
@Autowired
public void configureResourceLoader(AmazonS3 amazonS3, DefaultResourceLoader resourceLoader) {
SimpleStorageProtocolResolver simpleStorageProtocolResolver = new SimpleStorageProtocolResolver(amazonS3);
// As we are calling it by hand, we must initialize it properly.
simpleStorageProtocolResolver.afterPropertiesSet();
resourceLoader.addProtocolResolver(simpleStorageProtocolResolver);
}
要链接的链接: