我找不到任何有关如何使用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?
答案 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/`;
这是一个黑客,但如果你愿意尝试一个不优雅,但务实的解决方案,这就是我的工作。