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

但是,在创建第二个转码作业时,出现错误:

  The specified object could not be saved in the specified bucket because an object by that name already exists

transcoder 角色具有完整的 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 回答
0

如果您在 S3 存储桶上启用版本控制,那么 Amazon Elastic Transcoder 将很乐意用转码版本覆盖相同的密钥。

于 2022-02-24T10:47:54.440 回答
-1

我可以想到两种方法来实现它:

  1. 创建两个存储桶,一个用于临时文件存储(上传的位置),另一个用于放置转码文件。创建新文件时进行转码后,您可以删除临时文件。
  2. 使用单个存储桶并上传带有一些后缀/前缀的文件。在删除前缀/后缀(用于临时名称)的同一存储桶中创建转码文件。

在这两种自动删除上传文件的情况下,您都可以将 Lambda 函数与 S3 通知结合使用。

于 2015-10-05T07:09:26.537 回答