我已將近25k個文件(大型媒體文件)上傳到s3存儲桶。我用PHP的AWS SDK2(S3Client::putObject
)執行上傳。現在,我需要更新這些文件的元數據,即將ContentDisposition更改爲附件並分配文件名。如何更新AWS S3存儲桶中的對象屬性
有沒有辦法執行此操作而無需重新上傳文件?請幫忙。
我已將近25k個文件(大型媒體文件)上傳到s3存儲桶。我用PHP的AWS SDK2(S3Client::putObject
)執行上傳。現在,我需要更新這些文件的元數據,即將ContentDisposition更改爲附件並分配文件名。如何更新AWS S3存儲桶中的對象屬性
有沒有辦法執行此操作而無需重新上傳文件?請幫忙。
是的,您可以使用copyObject method,其中您設置CopySource
參數等於Bucket
和Key
參數。
例子:
// setup your $s3 connection, and define the bucket and key for your resource.
$s3->copyObject(array(
'Bucket' => $bucket,
'CopySource' => "$bucket/$key",
'Key' => $key,
'Metadata' => array(
'ExtraHeader' => 'HEADER VALUE'
),
'MetadataDirective' => 'REPLACE'
));
更新緩存控制元數據的S3對象
<?php
define('S3_BUCKET', 'bucket-name');
define('S3_ACCESS_KEY', 'your-access-key');
define('S3_SECRET_KEY', 'secret-key');
define('S3_REGION', 'ap-south-1'); //Mumbai
require 'vendors/aws/aws-autoloader.php';
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
try {
$s3 = S3Client::factory(array(
'version' => 'latest',
'region' => S3_REGION,
'credentials' => array(
'secret' => S3_SECRET_KEY,
'key' => S3_ACCESS_KEY,
)
));
$objects = $this->s3->getIterator('ListObjects', array('Bucket' => S3_BUCKET));
echo "Keys retrieved!\n";
foreach ($objects as $object) {
echo $object['Key'] . "\n";
$s3->copyObject(array(
'Bucket' => S3_BUCKET,
'CopySource' => S3_BUCKET . '/' . $object['Key'],
'Key' => $key,
'ContentType' => 'image/jpeg',
'ACL' => 'public-read',
'StorageClass' => 'REDUCED_REDUNDANCY',
'CacheControl' => 'max-age=172800',
'MetadataDirective' => 'REPLACE'
));
}
} catch (S3Exception $e) {
echo $e->getMessage() . "\n";
}
與現在的答案有什麼不同? – mishka 2017-07-04 15:13:04
你找到一個解決的辦法?我唯一看到的就是'copyObject'。 – dsummersl 2013-06-28 13:28:32
@dsummersl是的,copyObject是唯一的出路,據我所知。 – mishka 2013-11-05 13:00:24