OSS云存储的权限控制、开放接口规范和错误响应以及SpringBoot整合OSS

一、OSS云存储的权限控制

1、权限控制方式

针对存放在 Bucket 的 Object 的访问,OSS 提供了多种权限控制方式,包括 ACL、RAM Policy 和Bucket Policy。

  • ACL:OSS 为权限控制提供访问控制列表(ACL)。ACL是基于资源的授权策略,可授予 Bucket和 Object 访问权限。 可以在创建 Bucket 或上传 Object 时设置 ACL,也可以在创建 Bucket或上传Object 后的任意时间内修改 ACL。
  • RAM Policy:RAM (Resource Access Management)是阿里云提供的资源访问控制服务。RAMPolicy 是基于用户的授权策略。
  • Bucket Policy:Bucket Policy 是基于资源的授权策略。相比于 RAM Policy,Bucket Policy 操作简单,支持在控制台直接进行图形化配置。

2、ACL

  1. Bucket ACL
    Bucket ACL是 Bucket 级别的权限访问控制。目前有三种访问权限:public-read-write,publicread 和 private,含义如下:
    在这里插入图片描述
    操作方式
    在这里插入图片描述

  2. Object ACL
    Object ACL是Object 级别的权限访问控制。目前有四种访问权限:private、public-read、publicread-write、default。PutObjectACL 操作通过 Put 请求中的 x-oss-object-acl 头来设置,这个操作只有 Bucket Owner 有权限执行。
    Object ACL 的四种访问权限含义如下:
    在这里插入图片描述
    操作方式和上面类似 参考官方文档即可
    https://help.aliyun.com/document_detail/100676.html?spm=a2c4g.11186623.2.9.695b5a5bnz0mcm#concept-blw-yqm-2gb

3、RAM Policy

RAM(Resource Access Management)是阿里云提供的资源访问控制服务,RAM Policy是基于用户的授权策略。使用RAM,您可以创建、管理RAM用户,并可以控制这些RAM用户对资源的操作权限。当您的企业存在多用户协同操作资源时,使用RAM可以让您避免与其他用户共享云账号密钥,按需为用户分配最小权限,管理更加方便,权限更加明确,信息更加安全。

在这里插入图片描述

注意

  • 如果您选择使用RAM Policy,建议您通过官方工具RAM策略编辑器快速生成所需的RAM Policy。
  • RAM Policy操作比较复杂,强烈推荐您使用简单易用的图形化配置方式Bucket Policy。
    https://help.aliyun.com/document_detail/102600.html?spm=a2c4g.11186623.6.693.143258f6f33HST

4、Bucket Policy

Bucket Policy是基于资源的授权策略。相比于RAM Policy,Bucket Policy支持在控制台直接进行图形化配置操作,并且Bucket拥有者直接可以进行访问授权。

Bucket Policy常见的应用场景如下:

  • 向其他账号的RAM用户授权访问。
    您可以授予其他账号的RAM用户访问您的OSS资源的权限。
  • 向匿名用户授予带特定IP条件限制的访问权限。
    某些场景下,您需要向匿名用户授予带IP限制的访问策略。例如,企业内部的机密文档,只允许在企业内部访问,不允许在其他区域访问。由于企业内部人员较多,如果针对每个人配置RAMPolicy,工作量非常大。此时,您可以基于Bucket Policy设置带IP限制的访问策略,从而高效方便地进行授权。

Bucket Policy的配置方法和教程视频请参见使用Bucket Policy授权其他用户访问OSS资源

二、OSS存储开放接口规范 和 错误响应

1、开放接口规范

开发者在发送请求给 OSS 时,既可以使用 带签名认证的请求,也可以使用匿名访问。OSS提供的相关API接口如下
关于Service操作
在这里插入图片描述
关于Bucket的操作
在这里插入图片描述

关于Object的操作
在这里插入图片描述

关于Multipart Upload的操作
在这里插入图片描述
跨域资源共享(CORS)
在这里插入图片描述
关于Live Channel的操作
在这里插入图片描述

案例剖析
从上面的请求中 挑选任意接口分析
createBucket 创建Bucket
putObject 上传Object
getObject 下载Object

2、OSS云存储错误响应

当用户访问OSS出现错误时,OSS会返回给用户相应的错误码和错误信息,便于用户定位问题,并做出适当的处理

  1. OSS的错误响应格式
    当用户访问OSS出错时,OSS会返回给用户一个合适的3xx,4xx或者5xx的HTTP状态码;以及一个application/xml格式的消息体。

错误响应的消息体例子:

<?xml version="1.0" ?>
<Error xmlns=”http://doc.oss.aliyuncs.com”>
	<Code>
		AccessDenied
	</Code>
	<Message>
		Query-string authentication requires the Signature, Expires and
		OSSAccessKeyId parameters
	</Message>
	<RequestId>
		1D842BC5425544BB
	</RequestId>
	<HostId>
		oss.aliyuncs.com
	</HostId>
</Error>

所有错误的消息体中都包括以下几个元素:

  • Code:OSS返回给用户的错误码。
  • Message:OSS给出的详细错误信息。
  • RequestId:用于唯一标识该次请求的UUID;当你无法解决问题时,可以凭这个RequestId来请求OSS开发工程师的帮助。
  • HostId:用于标识访问的OSS集群(目前统一为oss.aliyuncs.com)
  1. OSS的错误码
    在这里插入图片描述
    在这里插入图片描述

  2. 请求一个需要Referer字段的Object
    https://xxx-imgs.oss-cn-beijing.aliyuncs.com/1.png

  3. OSS参数不支持的操作
    如果在OSS合法的操作中,添加了OSS不支持的请求头参数(例如在PUT的时候,加入If-ModifiedSince参数),OSS会返回501 Not Implemented错误

错误请求示例:

PUT /my-image.jpg HTTP/1.1
Host:oss-example. oss.aliyuncs.com
Date: Wed, 28 May 2011 22:32:00 GMT
If-Modified-Since: Wed, 06 Apr 2011 10:02:46 GMT

返回示例:

501 Not Implemented
x-oss-request-id: 77E534EBF90372BE
Content-Type: application/xml
Transfer-Encoding: chunked
Date: Thu, 28 Apr 2011 08:03:07 GMT
Connection: close
Server: AliyunOSS


<?xml version="1.0" ?>
<Error xmlns=”http://doc.oss.aliyuncs.com”>
	<Code>
		NotImplemented
	</Code>
	<Message>
		A header you provided implies functionality that is not implemented.
	</Message>
	<Header>
		If-Modified-Since
	</Header>
	<RequestId>
		77E534EBF90372BE
	</RequestId>
	<HostId>
		oss.aliyuncs.com
	</HostId>
</Error>
  1. OSS不支持的操作
    如果试图以OSS不支持的操作来访问某个资源,返回405 Method Not Allowed错误

错误请求示例:

abc / HTTP/1.1
Host:oss-example. oss.aliyuncs.com
Date: date
Authorization: signatureValue

返回示例:

x-oss-request-id: 2403382433A2EDA8
Allow: GET, DELETE, HEAD, PUT
Content-Type: application/xml
Transfer-Encoding: chunked
Date: Thu, 31 Mar 2011 10:01:52 GMT
Server: AliyunOSS


<?xml version="1.0" ?>
<Error xmlns=”http://doc.oss.aliyuncs.com”>
	<Code>
		MethodNotAllowed
	</Code>
	<Message>
		The specified method is not allowed against this resource.
	</Message>
	<ResourceType>
		BUCKET
	</ResourceType>
	<Method>
		abc
	</Method>
	<RequestId>
		2403382433A2EDA8
	</RequestId>
	<HostId>
		oss.aliyuncs.com
	</HostId>
</Error>

三、OSS云储存代码案例

1、SpringBoot整合OSS上传

  1. 需求描述
    使用SpringBoot完成上传图片
  2. 配置文件
    pom.xml
<dependency>
	<groupId>com.aliyun.oss</groupId>
	<artifactId>aliyun-sdk-oss</artifactId>
	<version>2.8.3</version>
</dependency>

application.properties

# Spring boot application
#server.servlet.context-path=/oss-server
server.port = 8999
#logging.level.root=DEBUG

aliyun.properties

aliyun.endpoint=http://oss-cn-beijing.aliyuncs.com
aliyun.accessKeyId=xxxxx
aliyun.accessKeySecret=xxxxx
aliyun.bucketName=xxxxx
aliyun.urlPrefix=https://xxxxx.oss-cn-beijing.aliyuncs.com/
  1. 编码实现
    AliyunConfig
@Configuration
@PropertySource("classpath:aliyun.properties")
@ConfigurationProperties(prefix = "aliyun")
@Data
public class AliyunConfig {
private String endpoint;
private String accessKeyId;
private String accessKeySecret;
private String bucketName;
private String urlPrefix;
@Bean
public OSSClient oSSClient() {
return new OSSClient(endpoint, accessKeyId, accessKeySecret);
}
}

实体对象

@Data
public class UpLoadResult {
// 文件唯一标识
private String uid;
// 文件名
private String name;
// 状态有:uploading done error removed
private String status;
// 服务端响应内容,如:'{"status": "success"}'
private String response;
}

FileUpLoadService

@Service
public class FileUpLoadService {
	@Autowired
	private AliyunConfig aliyunConfig;
	@Autowired
	private OSSClient ossClient;
	// 允许上传的格式
	private static final String[] IMAGE_TYPE = new String[]{".bmp", ".jpg",".jpeg", ".gif", ".png"};
	public UpLoadResult upload(MultipartFile uploadFile) {
		// 校验图片格式
		boolean isLegal = false;
		for (String type : IMAGE_TYPE) {
			if (StringUtils.endsWithIgnoreCase(uploadFile.getOriginalFilename(),type)) {
				isLegal = true;
				break;
			}
		} 
		UpLoadResult uploadResult = new UpLoadResult();
		if (!isLegal) {
			uploadResult.setStatus("error");
			return uploadResult;
		} 
		String fileName = uploadFile.getOriginalFilename();
		String filePath = getFilePath(fileName);
		try {
			ossClient.putObject(aliyunConfig.getBucketName(),filePath, new
			ByteArrayInputStream(uploadFile.getBytes()));
		} catch (IOException e) {
			e.printStackTrace();
			//上传失败
			uploadResult.setStatus("error");
			return uploadResult;
		} 
		uploadResult.setStatus("done");
		uploadResult.setName(this.aliyunConfig.getUrlPrefix() + filePath);
		uploadResult.setUid(String.valueOf(System.currentTimeMillis()));
		return uploadResult;
	} 
	private String getFilePath(String sourceFileName) {
		DateTime dateTime = new DateTime();
		return "images/" + dateTime.toString("yyyy")
		+ "/" + dateTime.toString("MM") + "/"
		+ dateTime.toString("dd") + "/" + UUID.randomUUID().toString() +"." + StringUtils.substringAfterLast(sourceFileName, ".");
	}
}

UpLoadController 控制器

@RequestMapping("/pic")
@Controller
public class UpLoadController {
	@Autowired
	private FileUpLoadService fileUpLoadService;
	@PostMapping("/upload")
	@ResponseBody
	public UpLoadResult upload(@RequestParam("file") MultipartFile multipartFile) {
		return this.fileUpLoadService.upload(multipartFile);
	}
}

2、数据处理

  1. 介绍
    阿里云OSS为在云上的数据打通了一个处理与使用的快速通道。通过简单的 RESTful 接口,可以在任何时间、任何地点、任何互联网设备上对存储在OSS中的数据进行分析处理。
    数据处理包含以下两种:
  • 阿里云OSS原生处理服务
    阿里云OSS原生处理服务包括图片处理和视频截帧,其中图片处理包括图片的缩略、剪裁、参数调节等。 OSS原生处理服务无需开通,默认集成在OSS中,创建完Bucket后即可使用。产生的数据处理费用直接在OSS上结算。
  • 智能媒体管理服务
    阿里云OSS与智能媒体管理(IMM)深度结合,支持文档预览、文档格式转换、人脸识别、图片分析、二维码识别等丰富的数据分析处理操作。
  1. 图片处理
    如何快速使用OSS图片处理服务。您可以通过三种方式处理图片:为图片URL添加参数进行单次处理、使用图片样式对不同图片进行相同处理,或使用OSS SDK对图片进行处理

在这里插入图片描述

  1. 视频截祯
    注意事项
    当前仅支持对视频编码格式为H264的视频文件进行视频截帧。
    OSS当前没有默认保存视频截帧的操作,视频截帧的图片需手动下载到本地。

参数说明
操作名称:snapshot
在这里插入图片描述
https://help.aliyun.com/document_detail/64555.html

  1. 音视频处理
    存储在OSS上的多媒体音视频数据,可以通过经济、弹性、高扩展的阿里云媒体转码服务,转换成适合在移动端、PC、TV上播放的格式。

媒体转码核心能力包括:

  • 转换媒体格式,支持多平台播放。
  • 保证相同画质质量的前提下,调整视频码率、提高视频压缩效率、减小文件体积,从而减少播放卡顿并节省存储空间和流量费用。
  • 添加水印logo,突出品牌,增加产品识别度。
  • 对视频进行剪辑/拼接等二次创作。
  • 针对画质较差的视频,去除画面中的毛刺、马赛克等,修复为高清晰版本。![]imges\音视频处理.jpg)

https://help.aliyun.com/document_detail/65583.html

  1. 智能媒体管理(IMM)
    阿里云 OSS 能够与智能媒体管理(IMM)深度结合,支持文档预览、文档格式转换、人脸识别、图片分析、二维码识别等丰富的数据分析处理操作。下面介绍如何在 OSS 控制台中使用 IMM 的功能。

前提条件

  • 要在 OSS 中使用 IMM 功能,您需要开通 IMM 服务并进行授权。有关开通服务及授权的详细步骤,请参见开通产品及创建项目中的前提条件部分。
  • 如果您使用 RAM 子账号进行本文中的操作,需要同时开通对应存储空间的访问权限和AliyunIMMFullAccess 权限。
  • 创建 IMM Project 及使用 IMM 功能会产生一定的费用,如果您不需要使用 IMM 的功能,请及时解绑 IMM。详细费用请参见计费说明。

3、CDN 加速 (阿里 网宿 微软 亚马逊 akmai)

对象存储OSS与阿里云CDN服务结合,可优化静态热点文件下载加速的场景(即同一地区大量用户同时下载同一个静态文件的场景)。您可以将OSS的存储空间(Bucket)作为源站,利用阿里云CDN将源内容发布到边缘节点。当大量终端用户重复访问同一文件时,可以直接从边缘节点获取已缓存的数据,提高访问的响应速度。

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值