Chinaunix首页 | 论坛 | 博客
  • 博客访问: 552886
  • 博文数量: 38
  • 博客积分: 10093
  • 博客等级: 上将
  • 技术积分: 1460
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-24 13:04
文章分类

全部博文(38)

文章存档

2012年(1)

2010年(9)

2009年(3)

2008年(25)

我的朋友

分类: LINUX

2010-02-26 10:00:23

Amazon::S3

  Amazon::S3 模块是 Net::Amazon::S3 的替换。我必须修改 new() 调用以运用散列引用,不过这也是独一须要修改的地点(很清楚,还要将所有 Net::Amazon::S3 引用修改为 Amazon::S3)。

  清单 6. net-amazon-s3.pl 修改而来的 amazon-s3.pl

 my $s3 = Amazon::S3->new({ 

              aws_access_key_id   => $opts{key}, 

              aws_secret_access_key => $opts{secret}, 

              retry         => 1, 

             }); 

  Amazon::S3 支撑许多选项;请参考文档看看能不能能够运用它们。通常而言,Amazon::S3 的目标好像与 Net::Amazon::S3 稍有不一样,但是从开发人员的角度看,它们的 API 是相似的。这对库的互操作性特别有益。

  您可能很赏析 Amazon::S3 的一个特征,即它不像 Net::Amazon::S3 那样依靠许多模块。他的开发者还强调它是可移植的,这对须要它的人而言是件好事。

  SOAP::Amazon::S3

  探索 File::Slurp

  File::Slurp 模块提供的代替项准许您仅运用一个基本的调用来读或写整个文件。它们的目标是基本易用,以及能够灵活地传入或获取文件内容。除了 . .. 之外,还有一个代替项能够读取一个目录下的所有文件。这些代替项适用于文件、管道、套接字、stdio、伪文件和 DATA

  学习 SOAP::Amazon::S3 模块须要明白一些背景知识,我将针对本文稍作推选 SOAP 是议决 HTTPWeb)访问信息的一种方式,它与运用路径示意资源的多见 HTTP 请求不一样。这些请求通常被称为是 REST 式的,并且趋向于成长成许多 URL 变体;相反,SOAP 仅命中一小部分 URL,并且将所有 XML 传递给服务器。

我很期盼能够继续谈 SOAP,但这是一个特别广泛的主题,因此我把它留给读者去探索。对于其价值,SOAP REST 的差别并不是很大。您运用哪种要领都能够编写出精彩或糟糕的代码。

  不幸的是,SOAP::Amazon::S3 在文档中被标记为处于试验阶段。您应该亲自测试它,看看能不能适合您。

  谈论区别。最先,咱们须要 File::Slurp 模块,因为 SOAP::Amazon::S3 不能 Net::Amazon::S3 Amazon::S3 那样提供上传和下载文件的便利要领。

  清单 7. soap-amazon-s3.pl 准备

# set Debug to 0 if you don't want to see all the XML 

my $s3 = SOAP::Amazon::S3->new( $opts{key}, $opts{secret}, 

 { Debug => 1, RaiseError => 1 } ); 

  我忽略了 Debug=1,因为您将怀着好奇心查看 SOAP::Amazon::S3 生成的所有 SOAP 流量。由于 RaiseError=1,所以我对 Net::Amazon::S3 执行 的所有错误检验都是不必要的,但这在生产环境中不是好主意。

  建立 bucket (my $bucket = $s3->createbucket($opts{create});) 与运用 Net::Amazon::S3 建立 bucket 不一样,因为它删除一个 bucket ($bucket->delete()) 或一个对象 ($bucket->object($key)->delete();)

  将数据写到一个文件稍微庞杂些,因为如前所述,SOAP::Amazon::S3 不具备 Net::Amazon::S3 中的便利函数。

  清单 8. soap-amazon-s3.pl 写文件

open W, '>', $where or die "Could not write to $where: $!"; 

print W $bucket->object($key)->getdata(); 

close W; 

  从文件上传也一样要庞杂些。

  清单 9. soap-amazon-s3.pl 上传文件

 my $type = ''.$mime->mimeTypeOf($where); # force $type to be a string 

 

 # use File::Slurp::read_file in scalar context to grab the whole file's contents 

 my $data = read_file($where); 

 $bucket->putobject($key, $data, { 'Content-Type' => $type });

MIME 类型必须装在一个字符串中,否则将影响 XML 帮助函数模块。此外,内容类型的大写化也与 Net::Amazon::S3 不一样。

  结尾,咱们探讨列出项。在这里,SOAP::Amazon::S3 不像 Net::Amazon::S3 那样强悍,因为对象元数据不能用。SOAP::Amazon::S3 有一个精彩的 $object->url() 要领,但它没有将空间转换成 %20,因此您要试用它,看看能不能适合您。我提交了一个 bug(记得,这仍旧一个实验模型),但是现在我避开了生产环境中的 $object->url() 要领。

  清单 10. soap-amazon-s3.pl 列出 bucket 和其中的对象

... 

elsif (exists $opts{list}) 

{ 

 print "Available buckets:\n"; 

 

 my @todo; 

 

 if ($opts{list}) 

 { 

 push @todo, map { $s3->bucket($_) } $opts{list}; 

 } 

 else 

 { 

 print "(Getting all buckets)\n"; 

 @todo = $s3->listbuckets; 

 } 

 

 foreach my $bucket ( @todo ) 

 { 

 printf "\t%s\n", $bucket->name; 

 

 if (exists $opts{keys}) 

 { 

  foreach my $key ($bucket->list()) 

  { 

  printf "\t\t%10s\t%-30s\t%s\n", $key->{Size}, $key->name, $key->url; 

  if (exists $opts{metadata}) 

  { 

   foreach my $entry (qw/Size ETag LastModified/) 

   { 

    printf "\t\t\t%20s=%s\n", $entry, ($key->{$entry}'UNDEFINED'); 

   } 

  } 

  } 

 } 

 } 

} 

  如您所见,SOAP::Amazon::S3 没有获取元数据,因此您不能 看到对象的内容类型等。假如您运用元数据来储存关于对象的主要信息时,这是一个令人不愉快的限定。假如不存在该限定的话,SOAP::Amazon::S3 在列出 bucket 及其元素方面能够与 Net::Amazon::S3 媲美。

结束语

  我没有细致评估另外两个 S3 CPAN 模块,而是在这里简要概括一下:

  假如您想要议决命令行访问 S3Net::Amazon::S3::Tools 是不错的挑选。这比自身编写好,因此您能够运用现成的工具测试它。

  假如仅处理单个 bucketTie::Amazon::S3 是不错的模块。您能够删除或修改散列条目和添加新的条目等等。不幸的是,它不准许 bucket 级别的操作(建立 bucket 和删除 bucket 等)或元数据操作(尤其是在新的密匙上配置内容类型)。因此,假如您想要在 S3 中储存纯数据,Tie::Amazon::S3 是特别有用的,但它对映像的用途不大。

  总体而言,Net::Amazon::S3 Amazon::S3 当前是处理 S3 的最好挑选。它们的互操作性 API 能够在必要时执行 切换。它们支撑所有操作,上至 bucket 操作,下至元数据获取。它们的 API 有些奇怪,但在配置之后很基本 运用。

  重视一下 SOAP::Amazon::S3,它很有潜力。假如您在单个 bucket 中处理纯数据,那么最好运用 Tie::Amazon::S3,因为它能够提供许多方便。

  祝您运用 S3 愉快!

阅读(777) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~