Я работаю над процессом загрузки большого количества файлов на S3, а для своих небольших файлов я создаю список команд, используя getCommand для их одновременной загрузки, например:
$commands = array();
$commands[] = $s3Client->getCommand('PutObject', array(
'Bucket' => 'mybucket',
'Key' => 'filename.ext',
'Body' => fopen('filepath', 'r'),
));
$commands[] = $s3Client->getCommand('PutObject', array(
'Bucket' => 'mybucket',
'Key' => 'filename_2.ext',
'Body' => fopen('filepath_2', 'r'),
));
etc.
try {
$pool = new CommandPool($s3Client, $commands, [
'concurrency' => 5,
'before' => function (CommandInterface $cmd, $iterKey) {
//Do stuff before the file starts to upload
},
'fulfilled' => function (ResultInterface $result, $iterKey, PromiseInterface $aggregatePromise) {
//Do stuff after the file is finished uploading
},
'rejected' => function (AwsException $reason, $iterKey, PromiseInterface $aggregatePromise) {
//Do stuff if the file fails to upload
},
]);
// Initiate the pool transfers
$promise = $pool->promise();
// Force the pool to complete synchronously
$promise->wait();
$promise->then(function() { echo "All the files have finished uploading!"; });
} catch (Exception $e) {
echo "Exception Thrown: Failed to upload: ".$e->getMessage()."<br>\n";
}
Это прекрасно работает для небольших файлов, но некоторые из моих файлов достаточно велики, и я бы хотел, чтобы они автоматически загружались в несколько частей. Итак, вместо использования getCommand('PutObject')
, которое загружает файл целиком, я хотел бы использовать что-то вроде getCommand('ObjectUploader')
, чтобы большие файлы можно было автоматически разбивать по мере необходимости. Однако, когда я пытаюсь использовать getCommand('ObjectUploader')
, он выдает ошибку и говорит, что не знает, что с этим делать. Я предполагаю, что, возможно, команда имеет другое имя, поэтому она выдает ошибку. Но также возможно, что это невозможно сделать так.
Если вы работали над чем-то подобным в прошлом, как вы это делали? Или даже если вы не работали над этим, я открыт для любых ваших идей.
Спасибо!
Ссылки: https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_commands.html#command-pool https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/s3-multipart-upload.html#object-uploader