使用springcloud整合oss依赖包的时候出现问题,尝试了很多方法解决,鼓捣了整整半天才知道原因,所以在这里记录一下。
先说下我的环境:
springboot:2.3.3.RELEASE
springcloud :Hoxton.SR8
springcloud-alibaba:2.2.1.RELEASE
正确做法
-
导入依赖包
一定要写上版本,因为oss没有2.2.1.版本的了,只能写之前的,也可能换方式了,这个后面可以再研究。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alicloud-oss</artifactId>
<version>2.2.0.RELEASE</version>
</dependency>
- 编写配置
spring:
cloud:
alicloud:
access-key: LTAI4G7UQXYjtGm4GKXT2***
secret-key: QW2nQKI2O4uWFehe6SpCaiTsrgb***
oss:
endpoint: oss-cn-qingdao.aliyuncs.com
-
编写测试
ossclient报红不用管,经尝试改代码可以运行成功,且没有输出错误
@SpringBootTest
class ShopProductApplicationTests {
@Autowired
private OSSClient ossClient;
@Test
public void saveFile() throws FileNotFoundException {
// 下载
// ossClient.getObject(new GetObjectRequest("存储桶名", "需下载的文件名"), new File("本地地址"));
//上传
// 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
InputStream inputStream = new FileInputStream("本地要存的地址");
// 填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称。
ossClient.putObject("存储桶名", "服务器文件名", inputStream);
// 关闭OSSClient。
ossClient.shutdown();
}
}
这样下来运行是没有问题的,但是我最初也是这么写的,遇到问题了
问题1. 提示bean中找不到ossclientclass
原因有两个:
1. 导入的spring-cloud-starter-alicloud-oss没有写上版本,或者导入了官网上写得(亲测,官网写得不可用,找不到这个包)
2. 在启动或者测试的项目中加入了,删除这个依赖
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>2.8.3</version>
<scope>test</scope>
</dependency>
例如,我在common的包中加入了springcloud-oss的依赖,然后在product子服务中编写测试案例,但是提示找不到class,因为我在product中引入了上面的依赖,删了就可以了
问题2. 提示endpoint为空
我在common中引入了springcloud-oss依赖,启动网关服务的时候,启动不起来,报错endpoint为空,那么需要在网关子服务的配置文件中配置上存储桶的信息,否则启动不了项目,虽然我并没有在这个服务中用到,但是被加载进来了,而且没有配。如果实在不想加,可以在网关服务的启动类上@SpringBootApplication(exclude = {***Configuration.class})出去。
问题3. 下载文件的时候,如果服务器上文件不存在也会报错,去服务器看下是不是文件不存在即可
版权声明:本文为qq_41460077原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。