ApiBoot是一款基于SpringBoot1.x,2.x的接口服务集成基础框架, 内部提供了框架的封装集成、使用扩展、自动化完成配置,让接口开发者能够选着性完成开箱即用, 再也不为搭建接口框架而犯愁,从而极大的提升开发效率。java
ApiBoot
添加快速集成Aliyun
的对象存储服务Oss
,提供经常使用的文件操做方法,固然也提供自定义扩展,以至于知足绝大数业务场景,而且经过扩展能够实现上传文件进度条、下载文件进度条、存储空间操做、静态网站托管、访问日志、防盗链、分片上传、追加上传、断点续传等等。git
在pom.xml
配置文件内添加依赖,以下所示:github
<!--ApiBoot Alibaba Oss--> <dependency> <groupId>org.minbox.framework</groupId> <artifactId>api-boot-starter-alibaba-oss</artifactId> </dependency>
ApiBoot
所提供的依赖都不须要添加版本号,具体查看ApiBoot版本依赖api
配置参数 | 参数介绍 | 默认值 | 是否必填 |
---|---|---|---|
api.boot.oss.region |
oss所属地域 | 空 | 是 |
api.boot.oss.bucket-name |
oss存储空间名称 | 空 | 是 |
api.boot.oss.access-key-id |
阿里云帐户accessKeyId | 空 | 是 |
api.boot.oss.access-key-secret |
阿里云帐户accessKeySecret | 空 | 是 |
api.boot.oss.domain |
oss存储空间所绑定的自定义域名,若是不配置,上传文件成功后返回默认格式化的文件访问路径 | 空 | 否 |
在使用ApiBoot Oss
时,只须要注入ApiBootOssService
类就能够完成默认方法的使用,以下所示:框架
@Autowired private ApiBootOssService apiBootOssService;
/** * 流方式上传 */ @Test public void uploadBytes() { ApiBootObjectStorageResponse response = apiBootOssService.upload("admin.txt", "admin".getBytes()); logger.info("文件名称:{}", response.getObjectName()); logger.info("文件访问路径:{}", response.getObjectUrl()); }
/** * 本地文件上传 */ @Test public void uploadFile() { ApiBootObjectStorageResponse response = apiBootOssService.upload("logo.png", "/Users/yuqiyu/Downloads/logo.png"); logger.info("文件名称:{}", response.getObjectName()); logger.info("文件访问路径:{}", response.getObjectUrl()); }
/** * 文件流方式上传 * * @throws Exception */ @Test public void uploadInputStream() throws Exception { FileInputStream inputStream = new FileInputStream(new File("/Users/yuqiyu/Downloads/logo.png")); ApiBootObjectStorageResponse response = apiBootOssService.upload("测试.png", inputStream); logger.info("文件名称:{}", response.getObjectName()); logger.info("文件访问路径:{}", response.getObjectUrl()); }
经过文件的输入流完成对象存储文件的上传
/** * 下载文件 */ @Test public void download() { apiBootOssOverrideService.download("测试.png", "/Users/yuqiyu/Downloads/测试.png"); }
在上面的示例中,文件会自动下载到/Users/yuqiyu/Downloads/
目录下,文件名称为测试.png
。
/** * 删除文件示例 */ @Test public void delete() { apiBootOssOverrideService.delete("测试.png"); }
删除对象存储空间内的文件时只须要传递文件名便可。
若是你是经过SpringMvc
提供的MultipartFile
对象进行上传文件,能够经过以下示例进行上传:dom
MultipartFile multipartFile = ..; // 流方式上传 ApiBootObjectStorageResponse responseByte = apiBootOssService.upload("测试.png", multipartFile.getBytes()); // 文件输入流方式上传 ApiBootObjectStorageResponse responseIs = apiBootOssService.upload("测试.png", multipartFile.getInputStream());
ApiBoot Alibaba Oss
提供的方法毕竟是有限的,所以ApiBoot
提供了自定义的扩展方式,让使用者能够根据Oss
官方文档进行扩展,包含上传文件进度条、下载文件进度条、存储空间操做、静态网站托管、访问日志、防盗链、分片上传、追加上传、断点续传等等。ide
自定义扩展首先须要建立类并继承ApiBootOssService
,以下所示:函数
//... public class ApiBootOssOverrideService extends ApiBootOssService { /** * logger instance */ static Logger logger = LoggerFactory.getLogger(ApiBootOssOverrideService.class); /** * 实现父类构造函数 * * @param endpoint 外网节点 * @param bucketName 存储空间名称 * @param accessKeyId 阿里云帐号受权Id * @param accessKeySecret 阿里云帐号受权Secret * @param domain 自定义域名 */ public ApiBootOssOverrideService(String endpoint, String bucketName, String accessKeyId, String accessKeySecret, String domain) { super(endpoint, bucketName, accessKeyId, accessKeySecret, domain); } /** * 建立bucket存储 * * @param bucketName 存储名称 */ public void createBucket(String bucketName) { OSSClient ossClient = getOssClient(); Bucket bucket = ossClient.createBucket(bucketName); logger.info("新建立存储空间名称:{}", bucket.getName()); logger.info("新建立存储空间所属人:{}", bucket.getOwner().getDisplayName()); closeOssClient(ossClient); } }
如上createBucket
方法所示ApiBootOssService
内部提供了获取OssClient
以及关闭OssClient
链接的方法,能够直接调用。测试
扩展生效网站
咱们自定义的扩展,须要将实例放入SpringIOC
容器内,方便咱们在使用处进行注入,要注意,因为构造函数参数的缘由,没法直接经过@Service
或者@Component
注解进行标注,须要经过以下方式:
//... @Bean @ConditionalOnMissingBean ApiBootOssOverrideService apiBootOssOverrideService(ApiBootOssProperties apiBootOssProperties) { return new ApiBootOssOverrideService(apiBootOssProperties.getRegion().getEndpoint(), apiBootOssProperties.getBucketName(), apiBootOssProperties.getAccessKeyId(), apiBootOssProperties.getAccessKeySecret(), apiBootOssProperties.getDomain()); }
ApiBootOssProperties
属性配置类,是ApiBoot
内置的,能够在任意地方进行注入,这里目的只是为了拿到相关配置进行构造参数实例化使用。
本章源码地址:https://github.com/hengboy/api-boot/tree/master/api-boot-samples/api-boot-sample-alibaba-oss