2017-09-16 177 views
1

我正在编码一个视频共享网站。我使用S3来存储和提供视频。我已经为我的MySQL数据库中的视频编码标签,但是我看到S3支持上传文件中的设置标签。这里是我用来上传文件的代码:PHP亚马逊S3上传和标签

try { 
       //Create a S3Client 
       $s3Client = new S3Client([ 
        'region' => 'us-east-1', 
        'version' => 'latest', 
        'credentials' => [ 
         'key' => '', 
         'secret' => '' 
        ] 
       ]); 
       $result = $s3Client->putObject([ 
        'Bucket' => $bucket, 
        'Key' => $assetFilename, 
        'SourceFile' => $fileTmpPath, 
        'Metadata' => array(
         'title' => $requestAr['title'], 
         'description' => $requestAr['description'] 
        ) 
       ]); 
       $s3Client->waitUntil('ObjectExists', array(
        'Bucket' => $bucket, 
        'Key' => $assetFilename 
       )); 
      } catch (S3Exception $e) { 
       returnError($e->getMessage()); 
      } 

这是一个2部分的问题。首先,我怎样才能在这里指定标签?我找不到任何PHP示例。接下来,假设某人上传视频并在其上放置了标签。 S3标签是键/值对。我应该为钥匙设置什么?我正在考虑为每个视频使用类似[tag1,tag2,tag3]的东西,以及那些是标记字符串的值。这里是S3标签doc:https://docs.aws.amazon.com/AmazonS3/latest/dev/object-tagging.html

回答

1

要设置对象标签,只需将Tagging元素传递给参数putObject()即可。在你的情况,这将会是这样的:

$result = $s3Client->putObject([ 
    'Bucket' => $bucket, 
    'Key' => $assetFilename, 
    'SourceFile' => $fileTmpPath, 
    'Tagging' => 'category=tag1', // your tag here! 
    'Metadata' => array(
     'title' => $requestAr['title'], 
     'description' => $requestAr['description'] 
    ) 
]); 

注意标签是一个简单的key=value字符串。作为一种“前瞻性思维”措施,我会将标签设为category=tagValue,以便您可以对它们进行分类并最终添加更多标签类别。如果你做tag1=true,那么它会变得凌乱。

+0

谢谢。至于类别,我甚至没有计划有标签类别。像YouTube这样的网站是否会使用它们?我认为他们只是输入一个标签列表,而不是将它们分类。我不知道如何将它们分类,除非我要求用户在标记时进行分类(而不是他们可能想要处理的内容)。 – xendi

+0

我的意思是说,也许现在你想要有标签,电影,音乐视频等等。但是稍后你可能想要1分钟,1小时或者其他什么,如果你有他们像'movie = true',或者'> 1min = true',而不是'cateogory = movie','length => 1min',那么你将所有的标签放在同一个“命名空间”中,它会是一团糟。 – ishegg

+0

好的。现在我看到标记信息存在了,不应该这样做吗? https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putobjecttagging – xendi