使用Net :: Amazon :: S3的Perl S3分段上传

时间:2019-05-22 16:43:27

标签: perl amazon-s3

我想使用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进行此操作的其他任何选项的分段上传示例?

1 个答案:

答案 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::Objectsome 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的提示,您可以从那里拿走它。