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 с легкостью перезапишет тот же ключ перекодированной версией.

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

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

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

Другие вопросы по тегам