
# 1 简介
苍穹默认实现了以磁盘文件的访问方式实现了文件存储服务,如果客户需要接入自己的文件存储实现,可以开发实现kd.bos.filestorage.spi.FileStorageService接口。
> 公有如阿里OSS,华为OBS,AWS S3等对象存储服务也可以映射为磁盘文件,无需二次开发即可利用苍穹默认的文件服务实现文件存取。
苍穹业务代码访问文件存储服务时,首先通过bos-fileservice-sdk-1.0.jar包的kd.bos.fileservice.FileServiceFactory()工厂类获取到FileStorageService具体的实现,然后执行实现类的上传下载删除接口的具体逻辑。

# 2 应用场景
有存储文件需求的场景。
# 3 接口说明
文件存储相关接口定义和实现存在于bos-fileservice-sdk-1.0.jar中。对于使用者来说只需要调用kd.bos.fileservice.spiimpl.FileStorageSPIFactory类创建文件存储对象FileService,然后调用FileStorageService对象的接口方法即可。
## 3.1 接口列表
***FileStorageSPIFactory***
| 静态方法 | 说明 |
| - | - |
| getFileStorageService | 创建文件存储服务对象 |
***FileStorageService***
| 方法 | 说明 |
| - | - |
| setConfig | 设置文件存储配置参数 |
| getForbiddenExtensions | 获取文件服务器禁止的文件扩展名集合 |
| getTicket | 获取文件服务器的Ticket |
| upload | 上传文件 |
| getInputStream | 读取指定文件的文件流 |
| download | 下载文件 |
| delete | 删除文件 |
## 3.2 接口详情
### getFileStorageService
+ **功能描述**
创建文件存储服务对象。
+ **方法**
```java
public static FileStorageService getFileStorageService(String fileServiceType,String className)
```
+ **参数说明**
| 参数 | 类型 | 说明 |
| - | - | - |
| fileServiceType | String | 文件存储类型(本地磁盘、S3或Swift) |
| className | String | FileStorageService对象的实现类名 |
+ **返回值**
返回FileStorageService对象。
### setConfig
+ **功能描述**
设置文件存储配置参数。例如S3、Swift的用户名,密码配置等。
+ **方法**
```java
void setConfig(FileStorageConfig fileStorageConfig)
```
+ **参数说明**
| 参数 | 类型 | 说明 |
| - | - | - |
| fileStorageConfig | FileStorageConfig | 文件存储服务配置对象 |
+ **返回值**
无
### upload
+ **功能描述**
上传文件。
+ **方法**
```java
String upload(InputStream inputStream, String path, String fileName,boolean isCreateNewFileWhenExists, Map<String, String> headers)
```
+ **参数说明**
| 参数 | 类型 | 说明 |
| - | - | - |
| inputStream | InputStream | 文件输入流 |
| path | String | 文件路径 |
| fileName | String | 文件名 |
| isCreateNewFileWhenExists | boolean | 文件已存在是否新建 |
| headers | Map<String, String> | 请求参数 |
+ **返回值**
返回文件存储URL。
### getInputStream
+ **功能描述**
读取指定文件的文件流。
+ **方法**
```java
InputStream getInputStream(String path,String userAgent)
```
+ **参数说明**
| 参数 | 类型 | 说明 |
| - | - | - |
| path | String | 文件路径 |
| userAgent | String | 用户代理字符串 |
+ **返回值**
返回文件流。
### download
+ **功能描述**
下载指定文件并输出到文件流中。
+ **方法**
```java
void download(String path, OutputStream out, St