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