如何在Perl中使用Amazon :: S3上传二进制文件?

时间:2012-12-05 14:42:08

标签: perl amazon-s3

我找不到任何有关如何使用Perl中的Amazon :: S3库将二进制文件上传到Amazon S3的示例。所有示例都是复制/粘贴的,只是进行文本/纯文本上传,就好像所有内容都只是纯文本一样。

以下是http://metacpan.org/pod/Amazon::S3的示例:

my $keyname = 'testing.txt';
my $value   = 'T';
$bucket->add_key(
    $keyname, $value,
    {   content_type        => 'text/plain',
        'x-amz-meta-colour' => 'orange',
    }
);

这将在Amazon S3中创建一个内容为“T”的纯文本文件“testing.txt”。并且Internet上的所有示例都只是复制此示例并修改值“T”。我找不到上传二进制数据的单个示例。

如何将包含二进制内容的图像/ jpeg上传到Amazon S3?

2 个答案:

答案 0 :(得分:3)

这个perl将一个jpeg文件上传到S3,将其置于减少的冗余存储上,使其公开,并设置其mime类型,以便在Web浏览器中正确显示。请在以下位置查看上传结果:https://s3.amazonaws.com/AppaApps/z/p.jpg

    use warnings FATAL => qw(all);
    use strict;
    use Data::Dump qw(dump);
    use Amazon::S3;

    #----------------------------------------------------------------------
    # Constants
    #----------------------------------------------------------------------

    my $s3 = Amazon::S3->new
     ({aws_access_key_id     => "...",
       aws_secret_access_key => "...",
       retry                 => 1
      }
     );

    my $b = $s3->bucket("AppaApps");   # Our bucket
    my $f = "z/p.jpg";                 # A specific file (key) on S3
    my $F = "p.jpg";                   # Local file to upload

    #----------------------------------------------------------------------
    # Upload a file
    #----------------------------------------------------------------------

    $b->add_key_filename($f, "p.jpg", 
     {"x-amz-storage-class"=>"REDUCED_REDUNDANCY", 'x-amz-meta-version'=>'12.11.22', acl_short=>'public-read',
      "Content-Type"=>"image/jpeg", 
     });
    print dump($b->errstr), "\n" if $b->errstr;

答案 1 :(得分:1)

虽然这需要安装第三方软件,但作为一种解决方法,我在perl脚本中使用s3cmd和系统调用将任意数据上传到我的存储桶。

s3cmd可以在这里找到:http://s3tools.org/s3cmd,一旦设置了密钥和权限,就像在perl脚本中调用以下内容一样简单。 (**非常感谢Michal Ludvig使这个工具易于使用和免费。)

`s3cmd put YOUR_FILE s3://YOUR_BUCKET/`;

这是一个黑客,但如果你愿意尝试一个不优雅,但务实的解决方案,这就是我的工作。