# oss-spring-boot-start
**Repository Path**: bushro/oss-spring-boot-start
## Basic Information
- **Project Name**: oss-spring-boot-start
- **Description**: aws-s3 通用存储操作 支持所有兼容s3协议的云存储: {阿里云OSS,腾讯云COS,七牛云,京东云,minio 等}
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 8
- **Forks**: 1
- **Created**: 2022-10-15
- **Last Updated**: 2023-11-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: oss
## README
# oss-spring-boot-start
## 介绍
aws-s3 通用存储操作 支持所有兼容s3协议的云存储: {阿里云OSS,腾讯云COS,七牛云,京东云,minio 等}
## 软件架构
springboot项目引入依赖
### 代码使用
```xml
com.bushro
oss-spring-boot-start
1.0.0
```
```java
@Autowire
private OssTemplate template;
/**
* 上传文件
* 文件名采用uuid,避免原始文件名中带"-"符号导致下载的时候解析出现异常
*
* @param file 资源
* @return R(bucketName, filename)
*/
@PostMapping("/upload")
public R upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
template.putObject(CommonConstants.BUCKET_NAME, fileName, file.getInputStream());
return R.ok(resultMap);
}
```
一般来说需要把文件信息记录到本地的表中,方便查看。
表结构示例:
```sql
CREATE TABLE `sys_file` (
`id` bigint(20) NOT NULL COMMENT '编号',
`file_name` varchar(100) DEFAULT NULL COMMENT '文件名称',
`bucket_name` varchar(200) DEFAULT NULL COMMENT '存储库名称',
`original` varchar(100) DEFAULT NULL COMMENT '原文件',
`type` varchar(50) DEFAULT NULL COMMENT '文件类型',
`file_size` bigint(20) DEFAULT NULL COMMENT '文件大小',
`create_by` varchar(64) CHARACTER SET utf8 NOT NULL DEFAULT ' ' COMMENT '创建人',
`update_by` varchar(64) CHARACTER SET utf8 NOT NULL DEFAULT ' ' COMMENT '修改人',
`create_time` datetime DEFAULT NULL COMMENT '上传时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`del_flag` char(1) DEFAULT '0',
`tenant_id` bigint(20) DEFAULT NULL COMMENT '所属租户',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文件管理表';
```
使用OssTemplate上传后在记录到本地表中,看自己项目需求。
## 阿里云OSS对接
海量、安全、低成本、高可靠的云存储服务,提供 99.9999999999%的数据可靠性。使用 RESTful API 可以在互联网任何位置存储和访问,容量和处理能力弹性扩展,多种存储类型供选择全面优化存储成本。
### 获取参数
- [1. 注册阿里云账号,并实名认证](https://www.aliyun.com/minisite/goods?userCode=ueyxv2qf)
- [2. 获取访问密钥](https://usercenter.console.aliyun.com/#/manage/ak)

- [3. 创建 bucket](https://oss.console.aliyun.com/bucket)

- 4.访问空间列表,获取刚创建空间基本信息

### oss 配置
```yaml
oss:
path-style-access: false #使用云OSS 需要关闭
endpoint: oss-cn-beijing.aliyuncs.com #对应上图 4 处配置
access-key: xxx # 上文创建的AK
secret-key: xxx # 上文创建的SK
bucketName: bushro-oss # 上文创建的桶名称
```
### 代码使用
```xml
com.bushro
oss-spring-boot-start
1.0.0
```
```java
@Autowire
private OssTemplate template;
/**
* 上传文件
* 文件名采用uuid,避免原始文件名中带"-"符号导致下载的时候解析出现异常
*
* @param file 资源
* @return R(bucketName, filename)
*/
@PostMapping("/upload")
public R upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
template.putObject(CommonConstants.BUCKET_NAME, fileName, file.getInputStream());
return R.ok(resultMap);
}
```
## 七牛云存储对接
七牛云对象存储是七牛云提供的高可靠、强安全、低成本、可扩展的存储服务。本白皮书详细介绍七牛云对象存储优势、服务场景、资费、功能以及操作指南。 提供免费空间和 CDN 流量供大家测试。
### 获取七牛相关参数
- [1. 注册七牛云账号,并实名认证](https://portal.qiniu.com/signup?code=1hmfw3964ueky)
- [2. 创建访问密钥](https://portal.qiniu.com/user/key)

- [3. 创建存储空间](https://portal.qiniu.com/kodo/bucket?shouldCreateBucket=true)

- [4. 访问空间列表,获取刚创建空间基本信息](https://portal.qiniu.com/kodo/bucket)

### oss 配置
```yaml
oss:
#使用云OSS 需要关闭
path-style-access: false
#对应上图 4 处配置
endpoint: rkacs7et8.hn-bkt.clouddn.com
# 上文创建的AK, 一定注意复制完整不要有空格
access-key: xxx
# 上文创建的SK, 一定注意复制完整不要有空格
secret-key:
xxx
# 上文创建的桶名称
bucketName: bushro-kodo
```
### 后台代码使用
```xml
com.bushro
oss-spring-boot-start
1.0.0
```
## 华为云存储
> 本章节内容针对 V3.9 之后版本,支持云厂商 OSS
华为云对象存储服务(Object Storage Service)是一款稳定、安全、高效、易用的云存储服务,具备标准 Restful API 接口,可存储任意数量和形式的非结构化数据
### 获取华为云相关参数
- [1. 注册华为云账号,并实名认证](https://www.huaweicloud.com/s/JeWtmOWCqCU)
- [2. 获取访问密钥](https://console.huaweicloud.com/iam/#/mine/accessKey)
创建完需要下载下来

- [3. 创建桶](https://storage.huaweicloud.com/obs/#/obs/create)

- [4. 访问空间列表,获取刚创建空间基本信息](https://storage.huaweicloud.com/obs)

### oss 配置
```yaml
oss:
path-style-access: false #使用云OSS 需要关闭
endpoint: obs.cn-north-4.myhuaweicloud.com #对应上图 4 处配置
access-key: xxx # 上文创建的AK
secret-key: xxx # 上文创建的SK
bucketName: xxx # 上文创建的桶名称
```
### 代码使用
```xml
com.bushro
oss-spring-boot-start
1.0.0
```
```java
@Autowire
private OssTemplate template;
/**
* 上传文件
* 文件名采用uuid,避免原始文件名中带"-"符号导致下载的时候解析出现异常
*
* @param file 资源
* @return R(bucketName, filename)
*/
@PostMapping("/upload")
public R upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
template.putObject(CommonConstants.BUCKET_NAME, fileName, file.getInputStream());
return R.ok(resultMap);
}
```
```java
@Autowire
private OssTemplate template;
/**
* 上传文件
* 文件名采用uuid,避免原始文件名中带"-"符号导致下载的时候解析出现异常
*
* @param file 资源
* @return R(bucketName, filename)
*/
@PostMapping("/upload")
public R upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
template.putObject(CommonConstants.BUCKET_NAME, fileName, file.getInputStream());
return R.ok(resultMap);
}
```
## 参与贡献
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request
## 特技
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)