Многочастная загрузка Perl S3 с использованием Net :: Amazon :: S3 - PullRequest
2 голосов
/ 22 мая 2019

Я хочу загрузить несколько больших двоичных файлов в приватную корзину S3, используя Perl.

Я реализовал тестовый скрипт для простой загрузки файла с использованием библиотеки 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' },
);

Это хорошо работает для небольших файлов, но для больших файлов (несколько ГБ) мне нужно реализовать загрузку из нескольких частей.

К сожалению, документация к этой библиотеке довольно лаконична.

Я думаю, что мне нужно реализовать такие методы, как InitiateMultipartUpload , PutPart и CompleteMultipartUpload , но я не уверен, как их использовать.

Есть ли пример многоэтапной загрузки с использованием этой библиотеки или любого другого варианта для этого с Perl?

1 Ответ

3 голосов
/ 22 мая 2019

В документах написано ...

Примечание. Это устаревший интерфейс. Вместо этого проверьте Net :: Amazon :: S3 :: Client.

Просмотр Net :: Amazon :: S3 :: Client ...

Net :: Amazon :: S3 :: Client, Net :: Amazon :: S3 :: Client :: Bucket и Net :: Amazon :: S3 :: Client :: Объектные классы разработаны после нескольких лет использования, чтобы их было легко использовать для общих задач.

И Net :: Amazon :: S3 :: Client :: Object содержит некоторую информацию о многоэтапной загрузке .

#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],
);

Надеемся, сэто и подсказки от API REST Multipart Upload , вы можете взять его оттуда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...