我寄愁心与爪哇

如果能一步登天,
那别人的坚持又算什么呢?

0%

阿里云OSS对象存储

针对于项目中的文件(比如用户上传的头像),我们可能会用到文件服务器来进行存储。

如果我们把文件服务器分为两类来看:一种就是自建服务器,如FastDFS;另一种就是使用第三方服务,如我们今天要说的阿里云OSS。

简单来讲,

  • 自建服务器:可以自己维护和定制,免费。但是麻烦。

  • 阿里的OSS服务:虽然说付费。但是省心。而且重要的是性能优越,对于海量数据存储与弹性扩容,阿里还是值得信赖的~~

小提示:阿里云OSS付费,不过只是学习时测试使用的话,达不到一定量级就不会有费用。

概要

总体上说,这篇文章要说以下内容:

阿里云官网:https://cn.aliyun.com/

准备

​ 准备工作比较简单,这里简单说下:

  • 注册账号

进入阿里云官网,点击右上角立即注册。

  • 登录账号

点击右上角登录

  • 实名认证

我的账号已经完成实名认证,这里就不再演示。

  • 开通OSS服务(如图)
    1. 点击上方导航栏中“产品”
    2. 点击左边栏中“存储”
    3. 点击“对象存储OSS”
    4. 点击“立即开通”

使用

1.管理控制台使用

管理控制台中使用,需要先创建一个Bucket(可以理解为一个文件服务器),然后进行上传即可。

1.1.创建Bucket

<1>点击控制台

<2>进入”对象存储OSS“控制台

​ ①方式一:

​ ②方式二:

​ 点击左上角“三”展开侧边栏

​ 点击对象存储OSS

<3>创建Bucket

①点击“创建Bucket”

②根据实际需求填写表单

测试环境下:我们只需要填写Bucket名称,读写权限改为公共读

额外功能开通可能产生更多费用,按自身需求填写即可。

创建Bucket-2

创建Bucket-3

说明:

  • Bucket名称:文件服务器的名称
  • 地域:阿里根据计算得到我们机器使用的最优地域,我们默认即可
  • 存储类型:
    • 标准存储:高可靠、高可用、高性能,数据经常被访问到
    • 低频访问存储:存储后,访问频率低
    • 归档存储:只存储,基本不访问
    • 冷归档存储:只存储,基本不访问
  • 同城冗余存储:提供机房容灾能力,有额外费用。
  • 版本控制:覆盖和删除的数据会以历史版本存入,有额外费用。
  • 读写权限:
    • 私有:
      • 文件读写均需要身份验证
    • 公共读:
      • 文件写操作需要身份验证
      • 文件读不需要验证
    • 公共读写:
      • 文件读写均不需要身份验证
  • 服务端加密方式:加密存储,有额外费用。
  • 实时日志查询:对 Bucket 的访问记录进行实时查询分析,有额外费用。
  • 定时备份:云备份服务,有额外费用。

1.2.上传文件

<1> 进入当前Bucket管理页

OSS管理控制台->Bucket列表->选择创建好的Bucket->当前Bucket管理页面

新创建Bucket时默认会跳转到当前Bucket管理页面

找到Bucket

<2> 新建目录

我们可以通过新建目录区分上传的不同文件。比如创建一个avatar目录专门用来存放头像。

新建目录

<3> 上传文件

  • 进入avatar目录
  • 点击上传文件

上传文件

  • 点击扫描文件/扫描文件夹(或直接将文件/文件夹拖入“待上传文件”区域)

选择上传文件

  • 点击上传文件进行上传

上传

1.3.地址栏访问

<1>找到需要访问的文件

<2>点击详情

文件详情

<3>复制图片url

复制url

<4>粘贴到地址栏->回车

粘贴到地址栏

<5>在浏览器右下角打开下载好的文件

打开上传好的文件

恭喜你,OSS在控制台中的使用你已经学会了~~

51f2a2bb70919664e9a850a575e11011

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:相当于密码

保存csv文件

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项目

创建maven项目

<2>pom中引入依赖

  • aliyun-sdk-oss:用于操作OSS
  • Junit:用于编写单元测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<dependencies>

<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>

</dependencies>

<3>新建测试类并指定包

新建测试类

测试类

<4>新建测试方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.cysheng.oss;

import org.junit.Test;

/**
* @author cysheng
* @create 2022-03-30 15:53
*/
public class OSSTest {
@Test
public void testUploadFile(){

}
}

<5>代码(以上传文件为例)

思路:阿里把对OSS的操作封装到了OSS类中,比如我们想上传文件,首先要创建OSS实例,然后调用它的putObject()方法进行上传。

我们在编写某一操作时,去官网中复制对应代码进行修改即可。

地址:https://help.aliyun.com/document_detail/84781.html

简单上传代码

<5>使用文件流

阿里云提供多种上传方式,这里我们以上传文件流作为演示,复制main方法中代码。

上传文件流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 填写Bucket名称,例如examplebucket。
String bucketName = "examplebucket";
// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
String objectName = "exampledir/exampleobject.txt";
// 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。
// 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
String filePath= "D:\\localpath\\examplefile.txt";

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

try {
InputStream inputStream = new FileInputStream(filePath);
// 创建PutObject请求。
ossClient.putObject(bucketName, objectName, inputStream);
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}

注:其中OSSException为com.aliyun.oss.OSSException;

<6>调整代码

  • 将方法中局部变量提取到成员变量(如果需要做其他测试,提取之后方便进行测试,如不进行其他测试,可省略该步骤)
  • 将异常抛出

修改代码

  • 修改变量值

    • endpoint:如图。
    • accessKeyId:创建子账号时生成的AccessKey ID。
    • accessKeySecret:创建子账号时生成的AccessKey Secret。
    • objectName:在文件服务器中的 目录名/文件名
    • filePath:指定上传文件路径

    修改变量值

<7>运行单元测试方法

<8>查看

结果

<9>URL访问规则

我们在项目中使用时,通常会将用户上传的文件提交到文件服务器,然后将文件访问的url地址存放到数据库中。

规则:https://bucket的名称.endpoint/文件夹/文件名。

结束

好了,本篇就说这么多,拜~

  • 本文主题: 阿里云OSS对象存储
  • 本文作者: 我寄愁心与爪哇
  • 本文链接: https://cysheng.gitee.io/35589.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

欢迎关注我的其它发布渠道