Я использую 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, чтобы перезаписать старый файл.
Я могу представить два способа его реализации:
В обоих случаях для автоматического удаления загруженных файлов вы можете использовать функцию Lambda с уведомлениями S3.