使用 Amazon S3 云存储服务

以下内容来自于IBM,原文链接:http://www.ibm.com/developerworks/cn/java/j-s3/

使用 S3 和 JetS3t:

1.S3 不是免费的,因此在创建帐户时您必须向 Amazon 提供一种支付手段(比如信用卡号码);
2.在创建帐户的过程中,您还需要创建凭据:访问密钥和秘密密钥(就像用户名和密码);
3.有了访问密钥和秘密密钥,您可以下载 JetS3t并使用它通过 RESTful API 与 S3 交互。
使用 S3 创建一个受限的影片公共下载需要 4 个步骤:
1.登录 S3 ;
2.创建存储段;
3.向存储段添加所需的视频(或对象);
4.创建一个指向该视频的时间敏感型 URL 。


使用编程手段通过 JetS3t 登录 S3:
1.创建一个AWSCredentials对象;
2.将AWSCredentials传递到S3Service 对象。
AWSCredentials对象将访问秘钥和秘密秘钥视为String。S3Service对象是接口类型。S3同时提供RESTful API和SOAP API,JetS3t库提供两种实现类型:RestS3Service和SoapS3Service。本文使用简洁的前者。
创建一个JetS3t的RestS3Service 实例(python):
<span style="font-size:10px;"> def awsAccessKey = "blahblah" 
 def awsSecretKey = "blah-blah" 
 def awsCredentials = new AWSCredentials(awsAccessKey, awsSecretKey) 

 def s3Service = new RestS3Service(awsCredentials)</span>

现在可以执行操作了。例如:创建存储段、添加影片、获取有时间限制的URL等业务流程。

创建存储段:

创建一个称为 bc50i 的存储段。通过 S3Service 类型,您有几个选项,使用getOrCreateBucket 调用。该方法可能返回一个存储段实例(表示为 S3Bucket 类型的实例)或在 S3 中创建代码段。
<span style="font-size:14px;">def bucket = s3Service.getOrCreateBucket("bc50i")</span>
修改存储段的访问控制列表:
def bucket.acl = AccessControlList.REST_CANNED_PUBLIC_READ_WRITE
当然,通过 API,也可以随意删除存储段。

向存储段添加对象:

1.创建一个 S3 对象;
def s3obj = new S3Object(bucket, new File("/path/to/nerfwars2.mp4"))
2.上传影片。
s3Service.putObject(bucket, s3obj)</span></span>
现在影片位于 Amazon 服务器了,影片的键就是它的名称。也可以根据需要重写该名称以调用其他对象。 JetS3t API(以及 Amazon S3 RESTful API)公开了许多信息,供创建对象时使用。

创建对象的 URL:

我的影片可以通过以下 URI 获取:http://bc50i.s3.amazonaws.com/nerfwars2.mp4 。但是,只有我才能获取。(在本例中,我只能通过编程方式访问它,因为与所有内容关联的默认访问控制被设置为拒绝任何未授权访问)。我的目的是为选择的用户提供一种方式查看新影片(在有限的时间内),直到我开始收取访问费用(S3 也会提供帮助)。
下图展示了默认的访问控制。返回的 XML 文档(相应地显示在我的浏览器中)告诉我对当前资产的访问被拒绝。













使用 S3可以创建一个公共 URL,但只在一段时间内有效(例如,24 小时内)。对于存储在 S3 上的影片,将创建一个 48 小时内有效的 URL 。然后我将向选定的用户提供该 URL,以便他们下载并观看(假定他们在两天内下载)。

要创建一个针对 S3 对象的时间敏感型 URL,可以使用 JetS3t 的 createSignedGetUrl 方法,这是一个 S3Service 类型的静态方法。该方法采用一个存储段名称、一个对象键(在本例中是影片名)、一些凭证(以 JetS3t 的 AWSCredentials 对象的形式)、截止日期。如果了解所需的存储段和对象键,可通过以下Groovy 代码快速获取 URL:
<span style="font-size:14px;"> def now = new Date() 
 def url = S3Service.createSignedGetUrl( 
   bucket.getName(), s3obj.key, awsCredentials, now + 2)</span>
使用 Groovy,可以通过  + 2  语法轻松指定一个 48 小时的限定日期。得到的 URL 如下所示:
<span style="font-size:14px;">https://bc50i.s3.amazonaws.com/nerfwars2.mp4?AWSAccessKeyId=1asd06A5MR2&Expires=1234738280&Signature=rZvk8Gkms%3D</span>
现在,通过该 URL,可以在浏览器中获得如下 所示的内容:


















<span style="font-size:14px;">
 def s3Service = new RestS3Service(awsCredentials)</span>
注意事项:
如果知道数据的Content/Mime类型(例如text/plain),也可以设置object相应的数据内容。S3Object不支持从输入流直接获取数据信息,但是JetS3t提供了两类方法用来获取文件或字符串数据信息。相应的构造方法会自动的设置object的Content-Type和Content-Length的信息。
// Create an S3Object based on a string, with Content-Length set automatically and
// Content-Type set to “text/plain”

<pre name="code" class="java" style="color: rgb(51, 51, 51); font-size: 14px; line-height: 26px;">String stringData = “Hello World!”;
S3Object stringObject = new S3Object(“HelloWorld.txt”, stringData);
 
 
// Create an S3Object based on a file, with Content-Length set automatically and
// Content-Type set based on the file’s extension (using the Mimetypes utility class)

<pre name="code" class="java" style="color: rgb(51, 51, 51); font-size: 14px; line-height: 26px;">File fileData = new File(“src/org/jets3t/samples/CodeSamples.java”);
S3Object fileObject = new S3Object(fileData);
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值