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());
}
經過文件的輸入流完成對象存儲文件的上傳

下載文件

/**
  * 下載文件
  */
@Test
public void download() {
  apiBootOssOverrideService.download("測試.png", "/Users/yuqiyu/Downloads/測試.png");
}
在上面的示例中,文件會自動下載到 /Users/yuqiyu/Downloads/目錄下,文件名稱爲 測試.png

刪除文件

/**
* 刪除文件示例
*/
@Test
public void delete() {
    apiBootOssOverrideService.delete("測試.png");
}
刪除對象存儲空間內的文件時只須要傳遞文件名便可。

MultipartFile 上傳文件

若是你是經過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
ApiBoot 開源交流羣

相關文章
相關標籤/搜索