简历网站免费,怎么查在哪个网站做的备案,竞价推广教程,注册资金可以乱写吗前言#xff1a; 这段时间来到了某大数据平台#xff0c;做平台技术底座封装和一些架构等等#xff0c;有结构化数据也有非结构数据#xff0c;涉及到很多技术#xff0c;自己也私下花时间去研究了很多#xff0c;有很多纯技术类的还是需要梳理并记录#xff0c;巩固以及…前言 这段时间来到了某大数据平台做平台技术底座封装和一些架构等等有结构化数据也有非结构数据涉及到很多技术自己也私下花时间去研究了很多有很多纯技术类的还是需要梳理并记录巩固以及复习。一个项目用到了几个云存储其中就包括Amazon S3这边就学习并记录和复习一下。 Amazon S3简介 Amazon 最早推出的两项云服务EC2 和 S3。 Amazon S3Amazon Simple Storage Service亚马逊简易存储服务EC2 Elastic Compute Cloud弹性计算云,即云中的虚拟服务器Amazon S3支持REST风格即通过GET、PUT、DELETE、POST、PATCH操作服务端的资源;Amazon S3 操作ServiceBuckets和Objects。Service 只包括 GET 操作就是返回所有的 Buckets 的列表。Object 顾名思义是指存储在云端的文件值得注意的是S3 中并没有明确的文件夹的概念而是通过指定 object 的路径来实现比如说object 可以为 “photos/1.jpg”。Bucket 拥有全局名名称由用户定义用来存放 Object由于是全局名所以要确保名字是别人没用过的。 S3 Http request headers
具体可以查看亚马孙官网 访问 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。HostGet Service 时为“ s3.amazonaws.com”。在对 bucket 和 object 进行操作时例如bucket的名字是“bucketname”那么 Host 就是“bucketname.s3.amazonaws.com”。x-amz-meta- 和 x-am- 开头的包括 Amazon 定义的一些元数据和一些特定的 header。后面如果出现会提到。Authorization这个是最重要的主要作用是签名Amazon 根据的请求计算出一个签名值和这里计算的签名值进行比对只有相同时访问才是合法的。接下来对 Authorization 的计算方法进行详述。 Authorization 的计算方法
根据亚马逊Amazon 文档说明
Authorization AWS AWSAccessKeyId : Signature;Signature Base64( HMAC-SHA1( UTF-8-Encoding-Of(YourSecretAccessKey), UTF-8-Encoding-Of( StringToSign ) ) );StringToSign HTTP-Verb \n Content-MD5 \n Content-Type \n Date \n CanonicalizedAmzHeaders CanonicalizedResource;CanonicalizedResource [ / Bucket ] HTTP-Request-URI, from the protocol name up to the query string [ subresource, if present. For example ?acl, ?location, or ?logging];CanonicalizedAmzHeaders described belowAuthorization 是由”AWS {0}:{1}“组成的第0个参数为你的 Access Key ID需要注册了 AWS 之后得到AWS 注册第1个参数是计算出来的签名值。签名值的计算方法是对一个 UTF-8 的字符串用你的 Secret Access Key同样在 Access Key ID 处获取进行 SHA1 加密。StringToSign 字符串也需要满足一定的格式。如上所示第一行是你的操作名应该为 PUT、GET、DELETE、HEAD 和 POST 中的一种。第二行是内容的 MD5 值的 base64 编码和 headers 中的 Content-MD5 值应保持一致。第三行是Content-Type同样需要和headers中的一致。第四行 Date和 headers 中的 Date 一致。需要说明的是 CanonicalizedAmzHeaders 和 CanonicalizedResource。CanonicalizedAmzHeaders 就是把 headers 中的 x-amz- 开头的作为 key 转化为小写并按顺序排列key 和 value 之间用冒号相连用换行符“\n”把它们给连接起来。 比如说 headers 中有
X-Amz-Meta-ReviewedBy: joejohnsmith.net
X-Amz-Meta-ReviewedBy: janejohnsmith.net
X-Amz-Meta-FileChecksum: 0x02661779
X-Amz-Meta-ChecksumAlgorithm: crc32那么CanonicalizedAmzHeaders就是
x-amz-meta-checksumalgorithm:crc32\n
x-amz-meta-filechecksum:0x02661779\n
x-amz-meta-reviewedby:joejohnsmith.net,janejohnsmith.netCanonicalizedResource 是指规范化的资源。如果访问资源没有指定 bucket那么就是“/”如果包括 bucket而不包括 object那就是“/bucket_name/”注意前后的“/”不要落了如果既包括 bucket也包括 object那么就是“/bucket_name/object_name”另外有时候比如是访问 bucke t的 acl访问控制列表 acess control list时object_name 就是 ?acl因此这时 CanonicalizedResource就是“/bucket_name/?acl”访问 object 的 acl 时CanonicalizedResource 就是“/bucket_name/object_name?acl”。需要说明的是如果计算出的 CanonicalizedAmzHeaders 不为空时要确保 CanonicalizedAmzHeaders 和 CanonicalizedResource 之间有换行符“\n”连接。 Amazon S3 REST API
Service
对 Service的 操作只包括 Get即获取用户所有的 Buckets 列表。Request headers 除了通用的没有其他的内容。比如
GET / HTTP/1.1
Host: s3.amazonaws.com
Date: date
Authorization: signatureValue返回的 XML 中包括 Owner 和各个 Buckets比如
?xml version1.0 encodingUTF-8?
ListAllMyBucketsResult xmlnshttp://doc.s3.amazonaws.com/2006-03-01OwnerIDbcaf1ffd86f461ca5fb16fd081034f/IDDisplayNamewebfile/DisplayName/OwnerBucketsBucketNamequotes/NameCreationDate2006-02-03T16:45:09.000Z/CreationDate/BucketBucketNamesamples/NameCreationDate2006-02-03T16:41:58.000Z/CreationDate/Bucket/Buckets
/ListAllMyBucketsResultBuckets
由于项目中只用到了 Buckets 的 PUT、GET、DELETE关于 acl、lifecycle、policy 等;
PUT Bucket
需要说明的是在 request headers 可以加入 bucket 的权限控制即指定 x-amz-acl合法的值包括privatepublic-read、public-read-write、authenticated-read、bucket-owner-read、bucket-owner-full-control从名字就可以看出具体的含义。
在 request body 中可以包括位置信息即用户期望 Bucket 放置在 Amazon 的哪个数据中心。默认为 US Standard其他数据中心包括 US West (Oregon) Region、US West (Northern California) Region、EU (Ireland) Region、Asia Pacific (Singapore) Region、Asia Pacific (Tokyo) Region、South America (Sao Paulo) Region。对于我们中国用户来说离得最近的是东京的数据中心。不过在 body 中内容中这七个数据中心写成‘EU’、 ‘eu-west-1’、‘us-west-1’、 ‘us-west-2’、‘ap-southeast-1’、‘ap-northeast-1’ 和 ‘sa-east-1’。
比如请求如下
PUT / HTTP/1.1
Host: BucketName.s3.amazonaws.com
Content-Length: length
Date: date
Authorization: signatureValueCreateBucketConfiguration xmlnshttp://s3.amazonaws.com/doc/2006-03-01/ LocationConstraintBucketRegion/LocationConstraint
/CreateBucketConfiguration
GET Bucket Get Bucket 主要是列出这个 Bucket 下所有的 objects。值得提的是四个参数 Prefix、Marker、MaxKeys 和 Delimiter利用这四个参数可以达到多种效果。首先是 Prefix它表示这个 Bucket 中返回的 Object 以这个值为开头。Marker 表示返回这个值以后的 Objects比如说第一次调用没有返回全部结果则把第一次调用返回的 Objects 的最后一个作为 Maker 调用以返回其以后的 Objects。MaxKeys 返回单次请求返回的最大 Objects 数默认为 1000。Delimiter 表示分隔符是在设置了 Prefix 之后能够返回共同的 Prefix在结果中为 CommonPrefix。因此通过设置 MaxKeys和Marker可以达到翻页效果每次返回的最后一个 Object 作为下一次请求的 Marker在返回值中如果 IsTruncated 为 true那么表示还有下一页。此外通过设置 Prefix 和将 Delimiter 设为”/“可以达到返回某个文件夹下所有内容的效果其中 CommonPrefix 下的 Prefix 表示文件夹路径而每个 Contents 中是 Object 的信息。 GET ?prefixNmarkerNedmax-keys40 HTTP/1.1
Host: quotes.s3.amazonaws.com
Date: Wed, 01 Mar 2009 12:00:00 GMT
Authorization: AWS AKIAIOSFODNN7EXAMPLE:xQE0diMbLRepdf3YBFIEXAMPLE
返回结果为
HTTP/1.1 200 OK
x-amz-id-2: gyB3jRPnrkN98ZajxHXr3u7EFM67bNgSAxexeEHndCX/7GRnfTXxReKUQF28IfP
x-amz-request-id: 3B3C7C725673C630
Date: Wed, 01 Mar 2009 12:00:00 GMT
Content-Type: application/xml
Content-Length: 302
Connection: close
Server: AmazonS3?xml version1.0 encodingUTF-8?
ListBucketResult xmlnshttp://s3.amazonaws.com/doc/2006-03-01/Namebucket/NamePrefix/Marker/MaxKeys1000/MaxKeysIsTruncatedfalse/IsTruncatedContentsKeymy-image.jpg/KeyLastModified2009-10-12T17:50:30.000Z/LastModifiedETagfba9dede5f27731c9771645a39863328/ETagSize434234/SizeStorageClassSTANDARD/StorageClassOwnerID75aa57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a/IDDisplayNamemtdamazon.com/DisplayName/Owner/ContentsContentsKeymy-third-image.jpg/KeyLastModified2009-10-12T17:50:30.000Z/LastModifiedETag1b2cf535f27731c974343645a3985328/ETagSize64994/SizeStorageClassSTANDARD/StorageClassOwnerID75aa57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a/IDDisplayNamemtdamazon.com/DisplayName
Objects
PUT Object PUT Object 基本操作类似在 Http body 中添加 Object 的内容这里就需要计算 Content-Type 等值。与 PUT Bucket 类似可以在 Http headers 中加入 x-amz-acl以控制 Object 的权限。 GET Object 在 GET Object 时Response headers 中会包括这个 Object 的相关信息除了 Content-Length 和 Content-Type 等Etag 其实就是内容的 MD5 后的16进制的字符串。而 Response body 中就是文件的内容。