2

我找不到任何关于如何使用 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 中创建一个纯文本文件“testing.txt”,内容为“T”。而网上所有的例子都只是复制这个例子,修改值“T”。我找不到上传二进制数据的单个示例。

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

4

2 回答 2

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;
于 2013-09-03T19:09:38.510 回答
1

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

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

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

这是一个 hack,但如果你愿意尝试一个不优雅但务实的解决方案,这就是我所做的。

于 2013-09-06T19:58:24.623 回答