2012-08-07 2 views
3

아마존의 AWS SDK PHP 버전을 사용하고 있습니다. 나는 Expires 헤더를 가진 많은 파일을 가지고있다. 해당 헤더를 삭제하고 Cache-control 헤더를 대신 추가하고 싶습니다. update_object 함수를 사용하면 헤더를 추가 할 수는 있지만 제거 할 수는 없습니다.Amazon S3 SDK를 사용하여 메타 데이터를 업데이트하는 방법

answers on this question 복사 할 때 파일의 메타 데이터를 업데이트 할 수 있지만 시도했지만 시도 할 수 없음을 제안합니다. 여기 내가 사용하는 것입니다 :

$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', 
     ), 
    ) 
); 

그러나, 복사 된 객체는 원래 객체 (만료 및 콘텐츠 형식 만 해당)와 동일한 헤더가 있습니다. 위의 모든 방법 (Content-Type, Cache-Control, 메타 등)과 결합하여 동일한 결과를 얻었습니다.

메타 데이터를 어떻게 재설정합니까?

답변

2

나는 실제로 객체 자체를 복사하는 것이 일 때이 헤더를 적절하게 변경한다는 것을 발견했다. 원본을 덮어 쓰지 않도록 테스트 목적으로 두 번째 파일에 복사했습니다.

그러나 이상한 이유로 다른 파일로 복사해도 헤더가 변경되지 않지만 같은 파일로 복사하면됩니다.

+0

의 업데이트 메타 데이터하는 것이 좋습니다 .. 왜 다른 파일 "변화"모든 헤더를 복사하는 것? 새 파일에 헤더를 설정하지 않는다는 것을 의미합니까? –

+0

@alex 확실하지 않은 경우 죄송합니다. 요청에 새 헤더가 설정되어 있기 때문에 헤더가 변경되어야합니다. headers 매개 변수를 사용하여 동일한 파일 이름 (예 : FileA.jpg -> FileA.jpg)으로 복사하면 헤더가 변경되지만 다른 파일 (예 : FileA.jpg -> FileB.jpg)로 복사하면 제공된 헤더가 설정되지 않았습니다. – DisgruntledGoat

1

자바에서는 개체를 같은 위치에 복사 할 수 있습니다. 여기서 개체를 복사하는 동안 메타 데이터가 복사되지 않습니다. 원본의 메타 데이터를 가져와 요청을 복사하도록 설정해야합니다. 이 방법은 더이 이상한 조금 모호하게되어 삽입하거나 아마존 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); 
관련 문제