针对于项目中的文件(比如用户上传的头像),我们可能会用到文件服务器来进行存储。
如果我们把文件服务器分为两类来看:一种就是自建服务器,如FastDFS;另一种就是使用第三方服务,如我们今天要说的阿里云OSS。
简单来讲,
自建服务器:可以自己维护和定制,免费。但是麻烦。
阿里的OSS服务:虽然说付费。但是省心。而且重要的是性能优越,对于海量数据存储与弹性扩容,阿里还是值得信赖的~~
小提示:阿里云OSS付费,不过只是学习时测试使用的话,达不到一定量级就不会有费用。
概要
总体上说,这篇文章要说以下内容:
阿里云官网:https://cn.aliyun.com/
准备
准备工作比较简单,这里简单说下:
- 注册账号
进入阿里云官网,点击右上角立即注册。
- 登录账号
点击右上角登录
- 实名认证
我的账号已经完成实名认证,这里就不再演示。
- 开通OSS服务(如图)
- 点击上方导航栏中“产品”
- 点击左边栏中“存储”
- 点击“对象存储OSS”
- 点击“立即开通”
使用
1.管理控制台使用
管理控制台中使用,需要先创建一个Bucket(可以理解为一个文件服务器),然后进行上传即可。
1.1.创建Bucket
<1>点击控制台
<2>进入”对象存储OSS“控制台
①方式一:
②方式二:
点击左上角“三”展开侧边栏
点击对象存储OSS
<3>创建Bucket
①点击“创建Bucket”
②根据实际需求填写表单
测试环境下:我们只需要填写Bucket名称,读写权限改为公共读。
额外功能开通可能产生更多费用,按自身需求填写即可。
说明:
- Bucket名称:文件服务器的名称
- 地域:阿里根据计算得到我们机器使用的最优地域,我们默认即可
- 存储类型:
- 标准存储:高可靠、高可用、高性能,数据经常被访问到
- 低频访问存储:存储后,访问频率低
- 归档存储:只存储,基本不访问
- 冷归档存储:只存储,基本不访问
- 同城冗余存储:提供机房容灾能力,有额外费用。
- 版本控制:覆盖和删除的数据会以历史版本存入,有额外费用。
- 读写权限:
- 私有:
- 文件读写均需要身份验证
- 公共读:
- 文件写操作需要身份验证
- 文件读不需要验证
- 公共读写:
- 文件读写均不需要身份验证
- 私有:
- 服务端加密方式:加密存储,有额外费用。
- 实时日志查询:对 Bucket 的访问记录进行实时查询分析,有额外费用。
- 定时备份:云备份服务,有额外费用。
1.2.上传文件
<1> 进入当前Bucket管理页
OSS管理控制台->Bucket列表->选择创建好的Bucket->当前Bucket管理页面
新创建Bucket时默认会跳转到当前Bucket管理页面
<2> 新建目录
我们可以通过新建目录区分上传的不同文件。比如创建一个avatar目录专门用来存放头像。
<3> 上传文件
- 进入avatar目录
- 点击上传文件
- 点击扫描文件/扫描文件夹(或直接将文件/文件夹拖入“待上传文件”区域)
- 点击上传文件进行上传
1.3.地址栏访问
<1>找到需要访问的文件
<2>点击详情
<3>复制图片url
<4>粘贴到地址栏->回车
<5>在浏览器右下角打开下载好的文件
恭喜你,OSS在控制台中的使用你已经学会了~~
2.代码中使用
我们的阿里云主账号包括了使用阿里云服务的所有权限,如果我们在代码中使用主账号,一旦主账号泄露,会有很大风险。
所以,阿里云提供了RAM子账号的功能。新创建的RAM子账号没有任何使用阿里云服务的权限,我们只需要给子账号一个操作OSS服务的权限,这样可以使风险降到最小。
所以,我们下面就创建一个子账号,再授于一个操作OSS权限,然后在代码中使用这个账号操作。
2.1.创建子用户
<1>进入阿里云控制台首页
<2>搜索进入“访问控制 控制台”
<3>点击“身份管理”->“用户”->“创建用户”
<4>填写表单并确认
- 注意:因为我们要使用代码访问,一定要勾选Open API调用访问!
<5>保存好AccessKey ID和AccessKey Secret
这里点击下载CSV文件(包含AccessKey ID和AccessKey Secret的文件),或者点击复制并将其粘贴到安全并且自己方便找到的地方。
AccessKey ID和AccessKey Secret只会显示一次,一定要保管好!
AccessKey ID:相当于账号
AccessKey Secret:相当于密码
2.2.授权
<1>点击“权限管理”->“授权”->“新增授权”
<2>赋给账号一个“AliyunOSSFullAccess”权限
2.3.操作
参考官网SDK示例:https://help.aliyun.com/document_detail/32006.html
阿里云对象存储OSS提供了如下各大主流语言的SDK。
(点击进入官网提供的对应语言的SDK示例)
那么这里我们就以Java为例,学习如何操作OSS。SDK中提供了诸多对OSS的操作,包括但不限于对存储空间的操作,上传、下载文件,管理文件,授权访问…
<1>创建maven项目
<2>pom中引入依赖
- aliyun-sdk-oss:用于操作OSS
- Junit:用于编写单元测试
1 | <dependencies> |
<3>新建测试类并指定包
<4>新建测试方法
1 | package com.cysheng.oss; |
<5>代码(以上传文件为例)
思路:阿里把对OSS的操作封装到了OSS类中,比如我们想上传文件,首先要创建OSS实例,然后调用它的putObject()方法进行上传。
我们在编写某一操作时,去官网中复制对应代码进行修改即可。
<5>使用文件流
阿里云提供多种上传方式,这里我们以上传文件流作为演示,复制main方法中代码。
1 | // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。 |
注:其中OSSException为com.aliyun.oss.OSSException;
<6>调整代码
- 将方法中局部变量提取到成员变量(如果需要做其他测试,提取之后方便进行测试,如不进行其他测试,可省略该步骤)
- 将异常抛出
修改变量值
- endpoint:如图。
- accessKeyId:创建子账号时生成的AccessKey ID。
- accessKeySecret:创建子账号时生成的AccessKey Secret。
- objectName:在文件服务器中的 目录名/文件名
- filePath:指定上传文件路径
<7>运行单元测试方法
<8>查看
<9>URL访问规则
我们在项目中使用时,通常会将用户上传的文件提交到文件服务器,然后将文件访问的url地址存放到数据库中。
规则:https://bucket的名称.endpoint/文件夹/文件名。
结束
好了,本篇就说这么多,拜~