阿里云OSS

1.摘要

本篇博客对阿里云OSS的基本概念和使用进行总结,旨在快速上手该云存储产品,更为详细的内容可以参考官方文档,日后再进行补充。

2.概述

1)何为阿里云OSS?

阿里云对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的分布式云存储产品

2)为何使用云存储?

  • 传统数据存储的主要方式
    ①将数据存储于服务器本机,由操作系统(文件系统)直接通过文件路径实现对数据的存储与访问
    ②将数据存储于自建的存储系统中,通过本地进程间的或网络进程间的接口实现对数据的存储与访问(相当于在操作系统之上增加了一层数据存储与管理的应用,将业务与数据管理解耦)

这里的数据更具体的指各种非结构化的数据,即各种类型的文件或资源(如视频、图像、文本等)

  • 传统数据存储方式的主要不足

需要自建存储系统并处理各种细节(基本功能、数据组织、备份容灾、扩容、安全性、数据迁移等)

  • 云存储及其优势

与传统方式中的自建存储系统一致,只是将数据存储系统搭建、管理的任务交由第三方云服务提供商处理,省时省力省成本,是大数据、云服务时代敏捷开发的利器

3)使用方式

  • Web控制台
  • 命令行工具ossutil
  • 十多种语言的SDK
  • RESTfule API
  • 图形化工具ossbrowser

4)存储类型

类型解释
标准存储移动应用;大型网站;资源分享
低频访问访问频率低,但需实时响应的数据
归档存储需要长期保持,成本更低,数据在一分钟内可读
冷归档存储基本不再访问,但需长期存储,成本最低

5)功能介绍

功能介绍
生命周期管理对符合条件的数据进行自动删除或转换成更低成本的低频访问、归档存储等存储类型
多种上传方式简单上传、分片上传、追加上传,具有强一致性和原子性
数据容灾机制①同城冗余存储:将对象冗余存储在同一地域的三个可用区,确保硬件失效时数据的可靠、可用
②跨区域复制:将重要数据复制到其他区域,实现跨区域容灾
③合规保留策略:对不允许修改的数据,采用合规保留策略,以不可删除、不可修改的方式保存
④版本控制功能
企业级多层次安全防护①数据传输支持SSL加密(客户端加密)
②数据存储支持OSS托管加密和KMS托管加密(服务端加密)
用户级资源隔离①Bucket Policy(授权不同用户不同方式访问资源)
②RAM Policy
③访问控制ACL
④防盗链等鉴权和授权机制
OSS传输加速①对于跨国、跨洋等远距离传输可以进行OSS传输加速
②将OSS作为源站,搭配CDN进行内容的加速分发
媒体处理①即存即使用,可对存储的图像进行剪裁、缩放等操作
②提供高质量、高并行的音视频转码能力
领域解决方案监控行业、在线点播、交互式直播等

3.基本概念

1)存储空间Bucket

用于存储对象的容器

  • 配置信息
    ①地域Region:OSS数据中心所在的物理位置,指定后不能修改,不同Region对应的访问域名不同
    ②访问域名Endpoint:OSS对外服务的访问域名,内外网不同
    ③访问密钥AcessKey:AK,用户通过用户标识AccessKeyId和密钥AccessKeySecret对称加密的方式进行身份验证,可以由Bucket创建者和Bucket授权者创建
    ④所属资源组:为Bucket打不同的标签

  • 每个用户可以拥有多个存储空间,每个存储空间内部是扁平的,存储空间内的对象数目不限

  • 存储空间名在整个OSS范围内是全局、唯一、不可修改的

  • 命名规范
    ①只能包含数字、小写字母和短划线-
    ②必须以数字或小写字母开头和结尾
    ③长度在3-63字符之间

2)对象Object

对象是OSS存储数据的基本单元,也称OSS文件

  • 组成
    ①元信息Object Meta(如最后修改时间、大小等信息)
    ②用户数据Data
    ③文件名Key(也称ObjectKey、ObjectName,使用UTF8编码、长度在1-1023字符之间、不能以正反斜杠开头)

  • 对象类型
    ①Normal:简单模式上传的Object,适合5G以内的文件,只能读、不能修改,再次上传同名文件会覆盖
    ②Multipart:通过分片上传的Object,适合大文件,只能读,不能修改,再次上传同名文件会覆盖
    ③Appendable:追加方式上传的Object,可以追加上传,适用于视频监控、视频直播等实时视频流场景
    不同类型之间不能相互转换

4.使用示例

4.1服务购买与开通

访问阿里云官网 → 登录 → 选择:产品/存储/对象存储OSS → 折扣套餐 → 选择套餐类型、付费 → 在对象存储OSS访问页中点击服务开通(账户第一次使用)

4.2Web控制台

  • 创建存储空间Bucket

进入到管理控制台 → 点击Bucket列表 → 创建Bucket(进行配置)

  • 文件管理
    ①上传文件:当前目录/指定目录(路径不存在自动创建) → 指定ACL(继承、私有、公共读、公共写)
    ②下载文件
    ③文件共享:URL共享下载(将HTTP头中的Content-Disposition设为attachment);自行绑定域名实现URL预览

  • 通过自有域名访问OSS资源

4.3命令行工具ossutil

下面示例以Windows10 64位操作系统为例子

①首先,创建AcessKey密钥:进入账户控制台 → 从右上角头像位置,进入AccessKey管理页 → 创建AccessKey密钥,验证账户即可(该步骤属于阿里云的访问控制RAM范畴)

②进入安装目录,运行ossutil.bat
③键入ossutil config,指定配置文件位置,或回车将配置文件存储在默认位置(推荐)
④设置语言,CH/EN,默认为CH
⑤键入对应的endpooint(可在对应Bucket概览查看)、accessKeyID、accessKeysecret、stsToken(回车为空)
⑥键入ossutil进行验证,若出现命令行提示,则证明配置成功(最后还可将该目录添加到系统的环境变量中)

  • 简单示例
# 下载图片
ossutil cp oss://{bucket_name}/{file_name} {local_path}
# e.g.
ossutil cp oss://lincat-blog/image/my_pic1.jpg C:\Users\Administrator\Desktop

显示下载成功或失败提示:

其余命令行操作参见官方文档

4.4SDK编程

SDK编程以Java为例,OSS对Java的支持要求JDK版本在1.7及以上

  • 引入依赖

①JDK1.9以下的依赖

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

②JDK1.9以上还需要添加jaxb相关依赖(略)

  • 示例代码:读文件并保存在本地
/** 通过OSS对Java的支持读取文件 **/
public class SDKDemo {

    public static void main(String[] args) {
        // 外网ip
        String endpoint = "oss-cn-hangzhou.aliyuncs.com";
        // accessKeyID
        String accessKeyId = "";
        // accessKeySecret
        String accessKeySecret = "";
        /* OSSClient是OSS的Java客户端,用于管理存储空间和文件等OSS资源
        需要初始化一个OSSClient实例,并根据需要修改ClientConfiguration的默认配置项*/
        OSS ossClient = new OSSClientBuilder().build(endpoint,accessKeyId,accessKeySecret);
        try {
            // Bucket名
            String bucketName = "lincat-blog";
            // 对象名
            String objectName = "image/my_pic1.jpg";
            // 写入本地文件的路径
            String localFilePath = "my_pic1.jpg";
            // 获取对象
            OSSObject ossObject = ossClient.getObject(bucketName,objectName);
            // 转为输入流
            InputStream inputStream = ossObject.getObjectContent();
            FileOutputStream fileOutputStream = new FileOutputStream(localFilePath);
            // 写入输出文件流
            if(inputStream != null){
                int read;
                byte[] bytes = new byte[2048];
                while ((read = inputStream.read(bytes)) != -1) {
                    fileOutputStream.write(bytes, 0, read);
                }
            }
            // 关闭流与OSS客户端
            inputStream.close();
            fileOutputStream.close();
            ossClient.shutdown();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

4.5RESTful API

通过OSS的RESTful API对OSS进行操作,这里通过Java语言,编写下载对象的例子

GET /ObjectName HTTP/1.1
Host: BucketName.oss-cn-hangzhou.aliyuncs.com
Date: GMT Date
Authorization: SignatureValue
Range: bytes=ByteRange(可选)
  • 利用SpringBoot对RESTful请求的封装模板RestTemplate发起请求
<!-- 引入web starter以支持RestTemplate -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
	<version>2.7.2</version>
 </dependency>
  • 编写代码(请求公共可读写的OSS对象则无需Authorization)
/* 通过OSS的RESTful API 下载图片 */
public class RestDemo {
    public static void main(String[] args) throws IOException {
        // Spring封装的RESTful请求模板类
        RestTemplate restTemplate = new RestTemplate();

        // Region端点
        String endpoint = "oss-cn-hangzhou.aliyuncs.com";
        // accessKeyID
        String accessKeyId = "";
        // accessKeySecret
        String accessKeySecret = "";
        // bucket名
        String bucketName = "lincat-blog";
        // 对象名
        String objectName = "image/my_pic1.jpg";
        // 写入本地文件的路径
        String localFilePath = "advanced/src/oss/my_pic1.jpg";
        // 构造Authorization参数
        Map<String,String> params = new HashMap<String, String>();
        String authorization = new StringBuilder().append("OSS ")
                .append(accessKeyId)
                .append(":")
                .append(accessKeySecret).toString();
        params.put("Authorization",authorization);
        // 构造URL
        String url = new StringBuilder().append("http://")
                .append(bucketName)
                .append(".")
                .append(endpoint)
                .append("/").append(objectName).toString();
        // 注意此处的返回值类型org.springframework.core.io.Resource
        Resource resource = restTemplate.getForObject(url, Resource.class,params);
        // 输入流
        InputStream inputStream = resource.getInputStream();
        // 输出文件流
        FileOutputStream fileOutputStream = new FileOutputStream(localFilePath);
        // 写入输出文件流
        if(inputStream != null){
            int read;
            byte[] bytes = new byte[2048];
            while ((read = inputStream.read(bytes)) != -1) {
                fileOutputStream.write(bytes, 0, read);
            }
        }
        // 关闭流
        inputStream.close();
        fileOutputStream.close();
    }
}

运行可实现OSS对象的下载

4.6图形化工具

5.其他功能

5.1签名工具

1)Header签名
2)PostObject Policy签名
3)URL签名

  • 18
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值