CIK-OSS Tools
简介
OSS管理工具,支持阿里云OSS、AmazonS3、Minio、又拍云
(更多厂商持续集成中...)
使用
<dependency>
<groupId>cn.cikian</groupId>
<artifactId>cik-oss</artifactId>
<version>0.0.5</version>
</dependency>
latest:0.0.5
Cikian Maven仓库地址:
http://mvnrep.cikian.cn/repository/public/
1. Spring boot 项目
-
在配置文件中开启服务
在项目的
application.yml或application.properties中添加 OSS 相关配置。只有oss.enable设置为true时,自动装配才会生效。配置信息:
oss: enable: true # 必须为 true 才会加载 Bean provider: AWS # 可选值:MINIO, ALIYUN, AWS, UPYUN endpoint: http://127.0.0.1:9000 # UPYUN可缺省 access-key: your-access-key # UPYUN为操作员 secret-key: your-secret-key # UPYUN为操作员密码 role-session-name: cik-oss # STS 角色会话名称 role-arn: acs:ram::xxx:user/xxx # STS 角色 ARN bucket: your-bucket-name # 存储桶名称 region: us-east-1 # 地域,建议填写,部分厂商必须填写 expire: 3600 # 链接过期时间(秒) object-dir-drefix: photos/ # 对象存储目录前缀 url-prefix: https://example.com # url前缀,拼接实际访问地址,如果缺省,则使用bucket中的相对路径或默认厂商域名) -
在业务代码中注入使用
import cn.cikian.oss.service.OssServiceContext; @Service public class FileService { @Autowired private OssServiceContext ossContext; // 自动装配的 OSS 代理人服务 /** * 上传示例 */ public void uploadFile(String fileName, InputStream inputStream) { // 直接使用,AOP 会自动处理对应厂商 client 的创建和初始化 ossContext.putObject("my-bucket", objectKey, inputStream); } }
2. 非Spring Boot项目
-
准备配置对象
首先,需要手动创建一个
CikOssConfiguration实例并填入参数CikOssConfiguration config = new CikOssConfiguration(); config.setEnable(true); config.setProvider(OssTypeEnum.MINIO); // 指定厂商 config.setEndpoint("http://127.0.0.1:9000"); config.setAccessKey("admin"); config.setSecretKey("password"); config.setBucket("my-bucket"); config.setExpire(3600L); -
初始化具体的服务实现
手动
new出需要的实现类,并将配置对象传进去// 以 MinIO 为例 IOssService minioService = new MinIOServiceImpl(config); // 关键:非 Spring 环境没有 AOP 自动拦截,建议手动调用一次初始化客户端 minioService.createClient(); -
构建代理人(Context)
为了保持代码逻辑的一致性,建议依然使用
OssServiceContext来封装操作。// 将实现类放入列表(模拟 Spring 的 List 注入) List<IOssService> services = Collections.singletonList(minioService); // 创建上下文 OssServiceContext ossContext = new OssServiceContext(services, config); -
执行业务操作
public class FileService { // 通过上述步骤获取到context对象,或通过上述逻辑实现工具类、工厂类 /** * 上传示例 */ public void uploadFile(String fileName, InputStream inputStream) { // 直接使用,AOP 会自动处理对应厂商 client 的创建和初始化 ossContext.putObject("my-bucket", objectKey, inputStream); } }
Context 方法
objectKey一般指对象在Bucket中的完整路径,例如:test/photos/、test/photos/cikian.jpg
由于配置文件中已经定义了bucket,故以下所有方法中的
String bucket参数可省略,未来可能会支持指定配置外的Bucket
-
上传文件
void putObject(String objectKey, InputStream stream); void putObject(String bucket, String objectKey, InputStream stream); -
获取对象URL
URL getObjectUrl(String objectKey); URL getObjectUrl(String bucket, String objectKey); -
获取对象文件
InputStream getObject(String objectKey); InputStream getObject(String bucket, String objectKey); -
获取指定目录下的文件列表
List<String> getObjectList(String path); List<String> getObjectList(String bucket, String path);该方法返回对象的objectKey集合,例如,path为test/,则会返回path/下的所有文件名的集合:
[test/a.jpg, test/b.pdf, test/c.png]
-
删除对象
Boolean deleteObject(String bucket, String objectKey); Boolean deleteObject(String objectKey);
更多厂商、更多操作持续集成中,如需新增厂商或操作方法,可与我联系或者提交Issues
评论