ApiBoot - ApiBoot Alibaba Oss 使用文檔

ApiBoot是一款基於SpringBoot1.x,2.x的接口服務集成基礎框架, 內部提供了框架的封裝集成、使用擴展、自動化完成配置,讓接口開發者能夠選着性完成開箱即用, 再也不爲搭建接口框架而犯愁,從而極大的提升開發效率。java

ApiBoot添加快速集成Aliyun的對象存儲服務Oss,提供經常使用的文件操做方法,固然也提供自定義擴展,以至於知足絕大數業務場景,而且經過擴展能夠實現上傳文件進度條、下載文件進度條、存儲空間操做、靜態網站託管、訪問日誌、防盜鏈、分片上傳、追加上傳、斷點續傳等等。git

引入ApiBoot Alibaba Oss

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/目錄下,文件名稱爲測試.pngide

刪除文件

/** * 刪除文件示例 */
@Test
public void delete() {
	apiBootOssOverrideService.delete("測試.png");
}
複製代碼

刪除對象存儲空間內的文件時只須要傳遞文件名便可。函數

MultipartFile 上傳文件

若是你是經過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…

ApiBoot 開源交流羣
相關文章
相關標籤/搜索