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());
}
複製代碼
經過文件的輸入流完成對象存儲文件的上傳dom
/** * 下載文件 */
@Test
public void download() {
apiBootOssOverrideService.download("測試.png", "/Users/yuqiyu/Downloads/測試.png");
}
複製代碼
在上面的示例中,文件會自動下載到
/Users/yuqiyu/Downloads/
目錄下,文件名稱爲測試.png
。ide
/** * 刪除文件示例 */
@Test
public void delete() {
apiBootOssOverrideService.delete("測試.png");
}
複製代碼
刪除對象存儲空間內的文件時只須要傳遞文件名便可。函數
若是你是經過SpringMvc
提供的MultipartFile
對象進行上傳文件,能夠經過以下示例進行上傳:測試
MultipartFile multipartFile = ..;
// 流方式上傳
ApiBootObjectStorageResponse responseByte = apiBootOssService.upload("測試.png", multipartFile.getBytes());
// 文件輸入流方式上傳
ApiBootObjectStorageResponse responseIs = apiBootOssService.upload("測試.png", multipartFile.getInputStream());
複製代碼
ApiBoot Alibaba Oss
提供的方法畢竟是有限的,所以ApiBoot
提供了自定義的擴展方式,讓使用者能夠根據Oss
官方文檔進行擴展,包含上傳文件進度條、下載文件進度條、存儲空間操做、靜態網站託管、訪問日誌、防盜鏈、分片上傳、追加上傳、斷點續傳等等。網站
自定義擴展首先須要建立類並繼承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
內置的,能夠在任意地方進行注入,這裏目的只是爲了拿到相關配置進行構造參數實例化使用。
本章源碼地址:github.com/hengboy/api…