aws transcoder перезаписывает файлы на s3
Я использую AWS PHP SDK, чтобы загрузить файл в S3, а затем перекодировать его с помощью Elastic Transcoder.
При первом проходе все работает нормально, команда putobject перезаписывает старый файл (всегда с одинаковым именем) на s3:
$s3->putObject([
'Bucket' => Config::get('app.aws.S3.bucket'),
'Key' => $key,
'SourceFile' => $path,
'Metadata' => [
'title' => Input::get('title')
]
]);
Однако при создании второго задания перекодировки я получаю сообщение об ошибке:
The specified object could not be saved in the specified bucket because an object by that name already exists
роль транскодера имеет полный доступ к s3. Есть ли способ обойти это, или мне придется удалять файлы, используя SDK каждый раз, прежде чем его перекодировать?
моя работа создания:
$result = $transcoder->createJob([
'PipelineId' => Config::get('app.aws.ElasticTranscoder.PipelineId'),
'Input' => [
'Key' => $key
],
'Output' => [
'Key' => 'videos/'.$user.'/'.$output_key,
'ThumbnailPattern' => 'videos/'.$user.'/thumb-{count}',
'Rotate' => '0',
'PresetId' => Config::get('app.aws.ElasticTranscoder.PresetId')
],
]);
3 ответа
Сервис Amazon Elastic Transcoder документирует, что это ожидаемое поведение здесь: http://docs.aws.amazon.com/elastictranscoder/latest/developerguide/job-settings.html.
Если ваш рабочий процесс требует, чтобы вы перезаписали один и тот же ключ, то похоже, что вы должны получить вывод задания где-то уникальным, а затем выполнить операцию S3 CopyObject для перезаписи старого файла.
Если вы включите управление версиями в корзине S3, Amazon Elastic Transcoder с легкостью перезапишет тот же ключ перекодированной версией.
Я могу придумать два способа реализовать это:
- Создайте два сегмента, один для временного хранилища файлов (куда он был загружен), а другой для размещения транскодированного файла. После транскодирования при создании нового файла вы можете удалить временный файл.
- Используйте одну корзину и загрузите файл с некоторым суффиксом / префиксом. Создайте транскодированный файл в том же сегменте, удалив префикс / суффикс (который вы использовали для имени темпа).
В обоих случаях для автоматического удаления загруженных файлов вы можете использовать функцию Lambda с уведомлениями S3.