天天看點

ApiBoot - ApiBoot Alibaba Oss 使用文檔

ApiBoot是一款基于SpringBoot1.x,2.x的接口服務內建基礎架構, 内部提供了架構的封裝內建、使用擴充、自動化完成配置,讓接口開發者可以選着性完成開箱即用, 不再為搭建接口架構而犯愁,進而極大的提高開發效率。

`ApiBoot`添加快速內建`Aliyun`的對象存儲服務`Oss`,提供常用的檔案操作方法,當然也提供自定義擴充,以緻于滿足絕大數業務場景,并且通過擴充可以實作上傳檔案進度條、下載下傳檔案進度條、存儲空間操作、靜态網站托管、通路日志、防盜鍊、分片上傳、追加上傳、斷點續傳等等。

### 引入ApiBoot Alibaba Oss

在`pom.xml`配置檔案内添加依賴,如下所示:

```xml

org.minbox.frameworkapi-boot-starter-alibaba-oss

```

`ApiBoot`所提供的依賴都不需要添加版本号,具體檢視[ApiBoot版本依賴](https://github.com/hengboy/api-boot/blob/master/README.md#%E6%B7%BB%E5%8A%A0%E7%89%88%E6%9C%AC%E4%BE%9D%E8%B5%96)

### 配置參數清單

| 配置參數 | 參數介紹 | 預設值 | 是否必填 |

| -------------------------------- | ------------------------------------------------------------ | ------ | -------- |

| `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`類就可以完成預設方法的使用,如下所示:

```java

@Autowired

private ApiBootOssService apiBootOssService;

#### 流上傳

/**

* 流方式上傳

*/

@Test

public void uploadBytes() {

ApiBootObjectStorageResponse response = apiBootOssService.upload("admin.txt", "admin".getBytes());

logger.info("檔案名稱:{}", response.getObjectName());

logger.info("檔案通路路徑:{}", response.getObjectUrl());

}

#### 本地檔案上傳

* 本地檔案上傳

*/

public void uploadFile() {

ApiBootObjectStorageResponse response = apiBootOssService.upload("logo.png", "/Users/yuqiyu/Downloads/logo.png");

logger.info("檔案名稱:{}", response.getObjectName());

logger.info("檔案通路路徑:{}", response.getObjectUrl());

#### 檔案流上傳

* 檔案流方式上傳

*

* @throws Exception

public void uploadInputStream() throws Exception {

FileInputStream inputStream = new FileInputStream(new File("/Users/yuqiyu/Downloads/logo.png"));

ApiBootObjectStorageResponse response = apiBootOssService.upload("測試.png", inputStream);

> 通過檔案的輸入流完成對象存儲檔案的上傳

#### 下載下傳檔案

* 下載下傳檔案

public void download() {

apiBootOssOverrideService.download("測試.png", "/Users/yuqiyu/Downloads/測試.png");

> 在上面的示例中,檔案會自動下載下傳到`/Users/yuqiyu/Downloads/`目錄下,檔案名稱為`測試.png`。

#### 删除檔案

* 删除檔案示例

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`内置的,可以在任意地方進行注入,這裡目的隻是為了拿到相關配置進行構造參數執行個體化使用。

本章源碼位址:[https://github.com/hengboy/api-boot/tree/master/api-boot-samples/api-boot-sample-alibaba-oss](https://github.com/hengboy/api-boot/tree/master/api-boot-samples/api-boot-sample-alibaba-oss)

![ApiBoot 開源交流群](https://upload-images.jianshu.io/upload_images/4461954-be532cec551174d5.JPG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)