簡體   English   中英

aws轉碼器覆蓋s3上的文件

[英]aws transcoder overwrite files on 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操作來覆蓋舊文件。

如果您在 S3 存儲桶上啟用版本控制,那么 Amazon Elastic Transcoder 將很樂意用轉碼后的版本覆蓋相同的密鑰。

我可以想到兩種方法來實現它:

  1. 創建兩個存儲桶,一個用於臨時文件存儲(上載的位置),另一個用於存放轉碼文件。 創建新文件后進行轉碼,可以刪除臨時文件。
  2. 使用單個存儲桶並上傳帶有一些后綴/前綴的文件。 在同一個桶中創建轉碼文件,刪除prefex / suffix(用於臨時名稱)。

在自動刪除上傳文件的兩種情況下,您都可以將Lambda函數與S3通知一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM