Перекодировка файлов aws на 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') ], ]); 

Служба Amazon Elastic Transcoder сообщает, что это ожидаемое поведение здесь: http://docs.aws.amazon.com/elastictranscoder/latest/developerguide/job-settings.html#job-settings-output-key .

Если ваш рабочий процесс требует, чтобы вы перезаписали один и тот же ключ, это звучит так, как будто вы должны иметь выход задания где-то уникальным, а затем выполнить операцию S3 CopyObject, чтобы перезаписать старый файл.

Я могу представить два способа его реализации:

  1. Создайте два ведра: один для хранения файлов temp (где он загружен) и другой, где находится перекодированный файл. После транскодирования после создания нового файла вы можете удалить временный файл.
  2. Используйте одиночный ведро и загружайте файл с некоторым суффиксом / префиксом. Создайте перекодированный файл в том же ведро, удалив prefex / suffix (который вы использовали для имени temp).

В обоих случаях для автоматического удаления загруженных файлов вы можете использовать функцию Lambda с уведомлениями S3.