Я использую PHP-версию AWS SDK от Amazon. У меня есть куча файлов с заголовком Expires
; Я хочу удалить этот заголовок и вместо этого добавить заголовок Cache-control
. Функция update_object позволяет добавлять заголовки, но не удалять их.
Ответы на этот вопрос предполагают, что вы можете обновить метаданные файла при его копировании, но я попробовал его, и он не работает. Вот что я использовал:
$response = $s3->copy_object( array( 'bucket' => $bucket, 'filename' => $file, ), array( 'bucket' => $bucket, 'filename' => $file2, ), array( 'acl' => AmazonS3::ACL_PUBLIC, 'headers' => array( 'Content-Type' => 'image/jpeg', 'Cache-Control' => 'public,max-age=30240000', ), 'meta' => array( 'x-fake-header' => 'something awesome is happening', ), ) );
Однако скопированный объект имеет те же заголовки, что и исходный объект (Expires и Content-Type). Я пробовал всевозможные сочетания вышеперечисленных (с и без Content-Type, Cache-control, meta и т. Д.) И получить тот же результат.
Как сбросить метаданные?
Я только что нашел, что копирование, чтобы возразить самому себе, действительно меняет заголовки должным образом. Я копировал его во второй файл для тестирования, чтобы не перезаписывать оригинал.
Но по какой-то странной причине копирование в другой файл не изменяет заголовки, но копирование в тот же файл делает.
В Java вы можете скопировать объект в одно и то же место. Здесь метаданные не будут копироваться при копировании объекта. Вы должны получить метаданные оригинала и установить для копирования запрос. Этот метод более рекомендуется вставлять или обновлять метаданные объекта Amazon S3
ObjectMetadata metadata = amazonS3Client.getObjectMetadata(bucketName, fileKey); ObjectMetadata metadataCopy = new ObjectMetadata(); metadataCopy.addUserMetadata("yourKey", "updateValue"); metadataCopy.addUserMetadata("otherKey", "newValue"); metadataCopy.addUserMetadata("existingKey", metadata.getUserMetaDataOf("existingValue")); CopyObjectRequest request = new CopyObjectRequest(bucketName, fileKey, bucketName, fileKey) .withSourceBucketName(bucketName) .withSourceKey(fileKey) .withNewObjectMetadata(metadataCopy); amazonS3Client.copyObject(request);