编辑 | blame | 历史 | 原始文档

OSS概念

  • 对象存储服务(Object Storage Service)

对象存储是一种稳定、安全、高效、易用的云存储服务,具备标准Restful API接口,可存储任意数量和形式的非结构化数据。

  • 存储空间(Bucket)

存储空间是用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。存储空间具有各种配置属性,包括地域、访问权限、存储类型等。可以根据实际需求,创建不同类型的存储空间来存储不同的数据。

  • 对象(Object)

对象是OSS存储数据的基本单元,也被称为OSS的文件。对象由元信息(Object Meta)、用户数据(Data)和文件名(Key)组成。对象由存储空间内部唯一的Key来标识。对象元信息是一组键值对,表示了对象的一些属性,例如最后修改时间、大小等信息,同时您也可以在元信息中存储一些自定义的信息。

  • 地域(Region)

地域表示OSS的数据中心所在物理位置。可以根据费用、请求来源等选择合适的地域创建Bucket。

  • 访问域名(Endpoint)

Endpoint表示OSS对外服务的访问域名。OSS以HTTP RESTful API的形式对外提供服务,当访问不同地域的时候,需要不同的域名。通过内网和外网访问同一个地域所需要的域名也是不同的。

  • 访问密钥(AccessKey)

AccessKey简称AK,指的是访问身份验证中用到的AccessKey ID和AccessKey Secret。OSS通过使用AccessKey ID和AccessKey Secret对称加密的方法来验证某个请求的发送者身份。AccessKey ID用于标识用户;AccessKey Secret是用户用于加密签名字符串和OSS用来验证签名字符串的密钥,必须保密。关于获取AccessKey的方法

引入依赖

  • 目前BladeX提供的blade-starter-oss集成了四种oss,分别为:minio、阿里云oss、七牛oss、腾讯oss

  • blade-starter-oss开放了统一接口,大家可以依葫芦画瓢模仿集成其他所需要的oss

  • 引入格式为blade-starter-oss与对应的oss依赖,若用不到其他的oss可以不引入防止产生冗余的依赖

  • 引入minio依赖

~~~xml


org.springblade
blade-starter-oss



io.minio
minio

~~~

  • 引入阿里云oss依赖

~~~xml


org.springblade
blade-starter-oss



com.aliyun.oss
aliyun-sdk-oss

~~~

  • 引入七牛oss依赖

~~~xml


org.springblade
blade-starter-oss



com.qiniu
qiniu-java-sdk

~~~

  • 引入腾讯oss依赖

~~~xml


org.springblade
blade-starter-oss



com.qcloud
cos_api

~~~

配置OSS

  • 引入好依赖后,还需要到application-xx.yml或者到nacos对应的yaml配置文件加入以下配置

~~~yaml
oss:
enabled: true
name: minio
tenant-mode: true
endpoint: http://127.0.0.1:9000
access-key: xxxxxxx
secret-key: xxxxxxx
bucket-name: bladex
~~~

  • enabled:是否开启oss配置

  • name:具体开启的oss类型,minio为minio,阿里云oss为alioss,七牛oss为qiniu,腾讯oss为tencentcos

  • tenant-mode:是否开启租户模式,若开启,则会自动匹配将配置的bucket自动加上租户ID

  • endpoint:oss对外开放的地址

  • access-key:oss提供的accesskey

  • secret-key:oss提供的secretkey

  • bucket-name:存储桶名,有些oss服务需要手动先创建,有些可以自动创建

自定义存储桶

  • 自定义桶名规则见下图,可以自定义实例化实现了OssRule接口的bean来覆盖默认的BladeOssRule

image-20210228124404366image-20210228124621055

实战

MinIo简介

  • MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
  • MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。

如何启动

  • 参考地址如下:https://docs.min.io/cn/

  • 推荐使用前将官方文档简单过一遍,有个大概印象

  • docker启动参考如下,新版本minio需要定义两个端口,9000为api端口,9090为控制台端口,网页访问9000会自动跳转至9090

  • shell [root@JD ~]# docker run -d -p 9000:9000 -p 9090:9090 --name minio -e "MINIO_ROOT_USER=自定义用户名" -e "MINIO_ROOT_PASSWORD=自定义密码" minio/minio server /data --address '0.0.0.0:9000' --console-address '0.0.0.0:9090'

访问地址

  • 访问 http://localhost:9000 登陆
    ![](../images/screenshot_1558407780662.png)
  • 根据自定义的用户名与密码登陆,出现如下界面则说明部署成功
    ![](../images/screenshot_1558407917124.png)

如何使用

  1. 需要文件上传的服务引入依赖

~~~xml


org.springblade
blade-starter-oss



io.minio
minio

~~~

  1. 在配置文件或者nacos进行配置(具体access-key和secret-key获取可以参考上一章官方文档)

~~~yaml
oss:
enabled: true
name: minio
tenant-mode: true
endpoint: http://127.0.0.1:9000
access-key: xxxxxx
secret-key: xxxxxx
bucket-name: bladex
~~~

  1. 创建一个Controller,注入MinioTemplate(如果后续会更换oss,推荐注入OssTemplate,这样后续修改实现也不需要再修改代码)
    ![](../images/screenshot_1568891783629.png)

  2. 使用postman进行调用测试,调用成功
    ![](../images/screenshot_1568891991489.png)

  3. 打开minio控制台也发现了我们上传的文件
    ![](../images/screenshot_1568892006747.png)

  4. BladeX对minio进行了定制,可以使用MinioTemplate非常方便地进行minio文件操作

MinioTemplate

  1. 如何使用,大家可以前往 org.springblade.core.minio.MinioTemplate 进行查看
  2. 高频使用的api都有封装以及详细注释,大家可以前往阅读相关代码
    ![](../images/screenshot_1558408470322.png)