向存储段添加对象 使用JetS3t 的API创建S3对象就像操作存储段一样简单。JetS3t 库也很智能,可以负责处理与S3存储段内文件相关的内容类型。例如,我想向S3上传一段影片nerfwars2.mp4,以便用户能够在有限的时间内观看。创建一个S3对象与创建常见的 java.io.File 类型一样简单,并能将S3Object 类型与存储段关联,如清单 4 所示:: O1 A/ Z, k, R* |
步骤 4. 创建一个S3对象7 U9 Q. O7 m' r/ f6 v; Y0 k- g; A
def s3obj = new S3Object(bucket, new File("/path/to/nerfwars2.mp4"))) Y3 w. I$ V9 q
使用文件和存储段初始化 S3Object 之后,要做的所有事情就是通过 putObject 方法上传,如清单 5 所示:
+ j2 i# z o4 r 步骤 5. 上传影片
2 S3 w, B$ Q$ @3 K3 m s3Service.putObject(bucket, s3obj)
2 U# U( k- C+ X& n 使用清单 5 可以完成上传。现在影片位于Amazon服务器了,影片的键就是它的名称。当然,您可以根据需要重写该名称以调用其他对象。实际上,JetS3t API(以及 AmazonS3RESTful API)公开了许多信息,供您创建对象时使用。我们知道,您还可以提供访问控制列表。S3中的任何对象都可以保存API允许您创建的其他元数据。之后可以通过该元数据的S3API(以及派生的 JetS3t)查询任何对象。3 Z8 V7 F+ J4 Z
创建对象的URL
! Q( g+ D- C" H) |* W 到现在为止,我的S3实例有一个包含影片的存储段。实际上,我的影片可以通过以下URI获取:http://bc50i.s3.amazonaws.com/nerfwars2.mp4 。但是,只有我才能获取。(在本例中,我只能通过编程方式访问它,因为与所有内容关联的默认访问控制被设置为拒绝任何未授权访问)。我的目的是为选择的用户提供一种方式查看新影片(在有限的时间内),直到我开始收取访问费用(S3也会提供帮助)。
5 r3 d9 F+ Q$ H" i6 V3 K0 e 创建一个公共 URL 是S3提供的一个便捷功能;实际上,使用 S3,您可以创建一个公共 URL,但只在一段时间内有效(例如,24 小时内)。对于我刚刚存储在S3服务器上的影片,我将创建一个 48 小时内有效的 URL 。然后我将向选定的用户提供该 URL,以便他们下载并观看(假定他们在两天内下载)。
% U. Y s; E; j9 \' Y3 t# u 处理带有效期的文件
$ ~2 t! e" A6 Z+ I 要创建一个针对S3对象的时间敏感型URL,您可以使用 JetS3t 的createSignedGetUrl 方法,这是一个 S3Service 类型的静态方法。该方法采用一个存储段名称、一个对象键(在本例中是影片名,还记得吗?)、一些凭证(以 JetS3t 的AWSCredentials 对象的形式)、截止日期。如果您了解所需的存储段和对象键,则可以通过清单 6 中的 Groovy 代码快速获取 URL:
6 M# }) j. C+ i( q1 G: ~1 R 步骤 6. 创建一个时间敏感型URL
. p0 W o8 y/ W) j( r# O* _ def now = new Date()
' ?! h! L- ?5 i. | def url = S3Service.createSignedGetUrl(+ G e6 S2 W r9 Y- u
bucket.getName(), s3obj.key, awsCredentials, now + 2)# ^5 o9 s/ l! |9 @8 u) g
使用 Groovy,我可以通过 + 2 语法轻松指定一个 48 小时的限定日期。得到的 URL 如下所示(只有一行):6 N5 f* }& k1 H
https://bc50i.s3.amazonaws.com/nerfwars2.mp4?AWSAccessKeyId=1asd06A5MR2&Expires=1234738280&Signature=rZvk8Gkms=; O3 Q, ^# I/ }, \1 ?
如果您的带宽和存储需求不稳定,则S3能提供很多帮助。例如,想想我演示的业务模型 — 影片在一年中特定的时间发布。在传统的存储模型中,您需要在某处机架上购买许多空间(或提供通向它的硬件和管道),很可能下载量很大,但随后会相对降低。但是,您不能根据需要付费。使用 S3,该模型将根据需要付费 — 公司仅在需要时为存储和带宽付费。更重要的是,S3的安全特性可以帮助您进一步指定人们何时可以下载视频,甚至可以指定谁可以下载。
; c! j) q- f7 R& z 使用S3实现这些需求非常容易。在高水平上,创建一个受限的影片公共下载需要 4 个步骤:5 k$ U% s6 ~" d: ?
1.登录S3。
0 l5 ~" U5 r: V" V' _ 2.创建存储段。2 G+ @5 b8 P6 G$ f! V; a
3.向存储段添加所需的视频(或对象)。3 S5 P" u. {. r- M3 o+ w
4.创建一个指向该视频的时间敏感型 URL 。
( ~ ~ I. O" A2 O/ E 就是这样!/ K, D$ X3 N# M+ Z! y; D/ `* }9 N
使用后记:便利的按需付费模式
" C& _# S' N2 u; w 与传统存储模型相比,S3的随需付费模型有很多明显的优势。例如,在自己的硬盘上存储音乐收藏,我必须预先花 130 美元购买一个 500GB 的存储单元。我没有500GB 的数据可以存储,因此我为自己不需要的空间花费了 25 美分 /GB(虽然很便宜)。我还需要维护设备并支付电费。如果我使用 Amazon,我不需要预先为不重要的资产支付 130 美元。我只需要支付 10 美分 /GB,无需为管理和维护存储硬件付费。
& p5 A) i5 T& l E. M, l, H* w 现在想想在整个企业范围内实现这些服务的好处。以 Twitter 为例,在S3上为100 万个用户帐户存储图片。通过按照使用付费的方式,Twitter 不需要花费大量资金购买硬件基础设施来存储和提供图片服务,也不需要支出人力和部件成本来配置和维护图片。
( `/ [" d: S- Q 云的好处还不止这些。您还可以实现低延迟和高可用性。假设存储在Amazon云中的资产遍布全世界,那么为各个位置提供内容的速度将会更快。更重要的是,由于您的资产分布在各种机器上,您的数据在一些机器(或部分网络)瘫痪时也能保持高可用性。1 U4 m# ~+ ~9 \
一言以蔽之,AmazonS3的好处很简单:低成本、高可用性、安全。除非您是一个 SAN 专家,喜欢维护硬件资产来存储数据内容,但是Amazon可能比您做的更好。在资金紧张的时候,为什么还要将自己的资金提前预支在硬件上呢(不要忘了,硬件会随时间贬值)? |