2013-10-16 16 views
9

Tôi sử dụng SDK Amazon cho PHP và cố gắng đặt Tiêu đề kiểm soát bộ nhớ cache trên hình ảnh. Khi tôi cố gắng thêm nó thông qua MetaData = array ("Cache-Control") nó thay đổi nó thành x-amz-meta-cache-control khi tôi đăng nhập vào thùng S3, và khi tôi tải xuống tệp, không có Cache - bộ kiểm soát. Nhưng nếu tôi thay đổi cài đặt này theo cách thủ công, Cache-control hoạt động hoàn hảo. Có một số thông số tôi thiếu mà tôi có thể sử dụng để đặt Tiêu đề yêu cầu HTTP theo chương trình khi tải lên không? Tôi đang sử dụng phương pháp PutObject. Tôi tin rằng AWS SDK là từ năm 2013.Đặt tiêu đề HTTP bộ nhớ cache kiểm soát đối tượng S3 từ SDK AWS PHP

+0

Bạn có thể gắn cờ câu trả lời của tôi là "được chấp nhận" nếu nó giúp bạn. – Scuzzy

Trả lời

16

Điều khiển bộ nhớ cache không được đặt qua chỉ mục "MetaData", "CacheControl" có cùng cấp với "MetaData", không được chứa trong đó.

http://docs.aws.amazon.com/aws-sdk-php-2/latest/class-Aws.S3.S3Client.html#_putObject

Bạn muốn sử dụng một cái gì đó như thế này là mảng cấu hình của bạn đối với phương pháp putObject() ...

$s3client->putObject(array(
    'Bucket' => '...', 
    'key' => '...', 
    'body' => '...', 
    'CacheControl' => 'max-age=172800', 
    'MetaData' => array(
    'metaKey' => 'metaValue', 
    'metaKey' => 'metaValue' 
))); 

Đối với phương pháp tải lên() ...

$s3client->upload(
    'bucket', 
    'key', 
    fopen('sourcefile','r'), 
    'public-read', 
    array('params' => array(
    'CacheControl' => 'max-age=172800', 
    'Metadata' => array(
     'metaKey' => 'metaValue', 
     'metaKey' => 'metaValue' 
)))); 

Ngoài ra, điều đáng chú ý là upload() sẽ quấn putObject() cho các tệp có kích thước 5MB, nếu không, tệp sẽ bắt đầu yêu cầu tải lên nhiều phần.

8

Nếu bạn muốn thêm tiêu đề CacheControl vào một mục đã có trong nhóm của bạn, hãy sử dụng phương thức copyObject của SDK. Đặt thông số MetadataDirective để THAY THẾ để làm cho mục ghi đè chính nó.

Tôi nhận thấy một điều kỳ lạ: tôi cũng phải đặt tiêu đề ContentType, mặc dù nó đã được đặt. Nếu không, hình ảnh sẽ không hiển thị nội tuyến trong trình duyệt nhưng được cung cấp dưới dạng tải xuống.

$result = $s3->copyObject(array(
    'ACL' => 'public-read', 
    'Bucket' => $bucket, // target bucket 
    'CacheControl' => 'public, max-age=86400', 
    'ContentType' => 'image/jpeg', // !! 
    'CopySource' => urlencode($bucket . '/' . $key), 
    'Key' => $key, // target file name 
    'MetadataDirective' => 'REPLACE' 
)); 
Các vấn đề liên quan