9

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')
      ]
    ]);

ただし、2 番目のトランスコード ジョブを作成すると、次のエラーが表示されます。

  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')       
      ],
    ]);
4

3 に答える 3

4

Amazon Elastic Transcoder サービスは、これが予想される動作であることをhttp://docs.aws.amazon.com/elastictranscoder/latest/developerguide/job-settings.html#job-settings-output-keyで文書化しています。

ワークフローで同じキーを上書きする必要がある場合は、ジョブを一意の場所に出力してから、S3 CopyObject オペレーションを発行して古いファイルを上書きする必要があるように思えます。

于 2014-04-01T16:50:17.033 に答える
-1

それを実装するには、次の 2 つの方法が考えられます。

  1. 2 つのバケットを作成します。1 つは一時ファイル ストレージ (アップロード先) 用で、もう 1 つはトランスコードされたファイルが配置される場所です。新しいファイルが作成されたときにトランスコードを投稿すると、一時ファイルを削除できます。
  2. 単一のバケットを使用し、サフィックス/プレフィックスを付けてファイルをアップロードします。プレフィックス/サフィックス (一時名に使用したもの) を削除して、同じバケットにトランスコードされたファイルを作成します。

アップロードされたファイルの自動削除の両方のケースで、S3 通知で Lambda 関数を使用できます。

于 2015-10-05T07:09:26.537 に答える