赞
踩
本篇博客对阿里云OSS的基本概念和使用进行总结,旨在快速上手该云存储产品,更为详细的内容可以参考官方文档,日后再进行补充。
1)何为阿里云OSS?
阿里云对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的分布式云存储产品
2)为何使用云存储?
这里的数据更具体的指各种非结构化的数据,即各种类型的文件或资源(如视频、图像、文本等)
需要自建存储系统并处理各种细节(基本功能、数据组织、备份容灾、扩容、安全性、数据迁移等)
与传统方式中的自建存储系统一致,只是将数据存储系统搭建、管理的任务交由第三方云服务提供商处理,省时省力省成本,是大数据、云服务时代敏捷开发的利器
3)使用方式
4)存储类型
类型 | 解释 |
---|---|
标准存储 | 移动应用;大型网站;资源分享 |
低频访问 | 访问频率低,但需实时响应的数据 |
归档存储 | 需要长期保持,成本更低,数据在一分钟内可读 |
冷归档存储 | 基本不再访问,但需长期存储,成本最低 |
5)功能介绍
功能 | 介绍 |
---|---|
生命周期管理 | 对符合条件的数据进行自动删除或转换成更低成本的低频访问、归档存储等存储类型 |
多种上传方式 | 简单上传、分片上传、追加上传,具有强一致性和原子性 |
数据容灾机制 | ①同城冗余存储:将对象冗余存储在同一地域的三个可用区,确保硬件失效时数据的可靠、可用 ②跨区域复制:将重要数据复制到其他区域,实现跨区域容灾 ③合规保留策略:对不允许修改的数据,采用合规保留策略,以不可删除、不可修改的方式保存 ④版本控制功能 |
企业级多层次安全防护 | ①数据传输支持SSL加密(客户端加密) ②数据存储支持OSS托管加密和KMS托管加密(服务端加密) |
用户级资源隔离 | ①Bucket Policy(授权不同用户不同方式访问资源) ②RAM Policy ③访问控制ACL ④防盗链等鉴权和授权机制 |
OSS传输加速 | ①对于跨国、跨洋等远距离传输可以进行OSS传输加速 ②将OSS作为源站,搭配CDN进行内容的加速分发 |
媒体处理 | ①即存即使用,可对存储的图像进行剪裁、缩放等操作 ②提供高质量、高并行的音视频转码能力 |
领域解决方案 | 监控行业、在线点播、交互式直播等 |
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,可以追加上传,适用于视频监控、视频直播等实时视频流场景
不同类型之间不能相互转换
访问阿里云官网 → 登录 → 选择:产品/存储/对象存储OSS → 折扣套餐 → 选择套餐类型、付费 → 在对象存储OSS访问页中点击服务开通(账户第一次使用)
进入到管理控制台 → 点击Bucket列表 → 创建Bucket(进行配置)
文件管理
①上传文件:当前目录/指定目录(路径不存在自动创建) → 指定ACL(继承、私有、公共读、公共写)
②下载文件
③文件共享:URL共享下载(将HTTP头中的Content-Disposition设为attachment);自行绑定域名实现URL预览
通过自有域名访问OSS资源
下面示例以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
显示下载成功或失败提示:
其余命令行操作参见官方文档
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(); } } }
通过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(可选)
<!-- 引入web starter以支持RestTemplate -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.7.2</version>
</dependency>
/* 通过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对象的下载
1)Header签名
2)PostObject Policy签名
3)URL签名
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。