文章标签 ‘Amazon S3’

Amazon S3 REST API详解

好久没有写博客,学期接近尾声,时间方面会宽松些了,其实想写的东西还挺多的。前段时间一个项目用到了几个云存储,其中就包括Amazon S3,于是这篇文章主要分享一些Amazon S3 Rest API的经验(Amazon S3还包括SOAP API)。

首先还是要先说一下Amazon S3,全称是Amazon Simple Storage Service。EC2和S3是Amazon最早推出的两项云服务。在传统的计算机领域,主要包括计算、存储、网络这几个方面, 在云计算时代,前两者分别对应虚拟化和cloud storage,由此可以显现出Amazon EC2和S3的重要性。如今随着云计算的大红大紫,也有很多使用Amazon S3的例子,典型的有Dropbox,还有之前被FB收购的Instagram,其照片存储就使用的S3。

关于REST,这也是比较火的一种Web服务架构。简单来说,资源是由URI指定,对资源的操作包括GET、PUT、POST、DELETE和HEAD,返回结果常常是XML或者其他形式。如果你想了解更多,可以查看REST的Wiki页面

Amazon S3的操作包括三部分:Service,Buckets和Objects。Service只包括GET操作,就是返回所有的Buckets的列表。Object顾名思义,是指存储在云端的文件,值得注意的是,S3中并没有明确的文件夹的概念,而是通过指定object的路径来实现,比如说,object可以为“photos/1.jpg”。而Bucket拥有全局名,名称由用户定义,用来存放Object,由于是全局名,所以要确保名字是别人没用过的。

访问Web服务时,Http request headers需要一些参数。主要包括:

  • Date:当前UTC时间,形式为“ Wed, 01 Mar 2009 12:00:00 GMT ”。
  • Content-Length: 当对Object进行操作的时候,返回内容的长度,注意不要包括headers中的内容。
  • Content-MD5:用base64编码文件内容的MD5值。
  • Content-Type:资源的类型,比如:text/plain。
  • Host:Get Service时为“ s3.amazonaws.com ”。在对bucket和object进行操作时,例如bucket的名字是“bucketname”,那么Host就是“bucketname.s3.amazonaws.com”。
  • x-amz-meta-和x-am-开头的:包括Amazon定义的一些元数据和一些特定的header。后面如果出现会提到。
  • Authorization:这个是最重要的,主要作用是签名,Amazon根据的请求计算出一个签名值和这里计算的签名值进行比对,只有相同时,访问才是合法的。接下来对Authorization的计算方法进行详述。

关于作者

残阳似血(@秦续业),程序猿一枚,把梦想揣进口袋的挨踢工作者。现加入阿里云,研究僧毕业于上海交通大学软件学院ADC实验室。熟悉分布式数据分析(DataFrame并行化框架)、基于图模型的分布式数据库和并行计算、Dpark/Spark以及Python web开发(Django、tornado)等。

博客分类

点击排行

标签云

扫描访问

主题

残阳似血的微博