我想使用Perl将一些较大的二进制文件上传到私有S3存储桶中。
我使用Net::Amazon::S3库为简单文件上传实现了测试脚本。
我的perl脚本如下:
use Net::Amazon::S3;
# S3 Config
$S3_ACCESS_KEY = "xxxxxx";
$S3_SECRET_KEY = "xxxxx";
$S3_HOST = "xxxxx";
$S3_BUCKET = "mybucket";
# Open S3 Connection
$s3 = Net::Amazon::S3->new(
{
aws_access_key_id => $S3_ACCESS_KEY,
aws_secret_access_key => $S3_SECRET_KEY,
host => $S3_HOST,
secure => 0,
}
);
# Create and open Bucket
$bucket = $s3->add_bucket(
{ bucket => $S3_BUCKET }
);
$bucket->add_key_filename(
"myfile.gz", # Object name on S3
"/tmp/myfile.gz", # Local filename
{ 'content_type'=> 'application/gzip' },
);
这对于小文件来说效果很好,但是对于大文件(几个GB),我必须实现分段上传。
不幸的是,该库中的文档相当简洁。
我认为我需要实现 InitiateMultipartUpload , PutPart 和 CompleteMultipartUpload 之类的方法,但我不确定如何使用它们。
是否有使用此库或使用Perl进行此操作的其他任何选项的分段上传示例?
答案 0 :(得分:3)
文档说...
注意:这是旧界面,请改用Net :: Amazon :: S3 :: Client。
看着Net::Amazon::S3::Client ...
Net :: Amazon :: S3 :: Client,Net :: Amazon :: S3 :: Client :: Bucket和Net :: Amazon :: S3 :: Client :: Object类是经过多年设计的易于执行常见任务。
Net::Amazon::S3::Client::Object有some information about multipart uploads。
#initiate a new multipart upload for this object
my $object = $bucket->object(
key => 'massive_video.avi'
);
my $upload_id = $object->initiate_multipart_upload;
...
#add a part to a multipart upload
my $put_part_response = $object->put_part(
upload_id => $upload_id,
part_number => 1,
value => $chunk_content,
);
my $part_etag = $put_part_response->header('ETag');
...
#complete a multipart upload
$object->complete_multipart_upload(
upload_id => $upload_id,
etags => [$etag_1, $etag_2],
part_numbers => [$part_number_1, $part_number2],
);
希望这里有the Multipart Upload REST API的提示,您可以从那里拿走它。