2013-01-04 9 views
26

Vì một số lý do tệp trong thùng S3 của tôi bị tải xuống thay vì hiển thị trực tuyến nên nếu tôi sao chép liên kết hình ảnh và dán vào thanh địa chỉ rồi điều hướng đến đó, nó sẽ thúc đẩy trình duyệt của tôi tải xuống. Thay vào đó tôi thực sự phải bấm vào hình ảnh mở để đi đến url.Tệp hiển thị nội dung AWS S3 thay vì tải xuống

Bất kỳ cách nào để thay đổi cách tệp được phân phát từ S3

+0

Khi bạn sao chép liên kết hình ảnh, nó trực tiếp trỏ đến URL hình ảnh. Trình duyệt chỉ đơn giản là hiểu để thực thi URL được cung cấp. –

+0

@SunilGulabani Nhưng tôi thấy các trang web sử dụng amazon s3 cho phép bạn truy cập tệp trực tiếp mà không cần phải tải xuống tệp. Ví dụ trang lưu trữ hình ảnh cho phép truy cập hình ảnh trực tiếp. Tôi đang nói đến đường dẫn tập tin trực tiếp ở đây là một ví dụ đây là một tập tin được lưu trữ trong thùng S3 của tôi: https://droplet-files.s3.amazonaws.com/7c32280bbcb1d3e67ac799ce9c71212f.JPG –

+1

Tôi nghĩ rằng loại nội dung của bạn được cung cấp sẽ sai trong khi tải lên hình ảnh. Nó cần phải là hình ảnh/jpeg. Kiểm tra loại nội dung: http://en.wikipedia.org/wiki/Internet_media_type –

Trả lời

23

Bạn cần thay đổi Loại nội dung. Từ bảng điều khiển S3, nhấp chuột phải vào đối tượng và chọn Thuộc tính, sau đó là Siêu dữ liệu. Bạn cũng có thể làm điều đó theo chương trình: http://docs.amazonwebservices.com/AWSSDKforPHP/latest/index.html#m=AmazonS3/change_content_type

+1

Tôi thấy, tôi đã sử dụng $ s3-> putObjectFile ($ tmp, $ bucket, $ actual_image_name , S3 :: ACL_PUBLIC_READ) trước đây, nhưng đối với một số lý do tôi nhớ làm như vậy mà tôi muốn đạt được với việc sử dụng chính sách xô –

+1

@Cl 'bạn cũng có thể [đặt kiểu nội dung trong phương thức 'putObject()' (http: //undesigned.org.za/2007/10/22/amazon-s3-php-class/documentation#putObject) (như 'putObjectFile()' là di sản ngay bây giờ). – mathielo

21
$client->putObject(array(
     'Bucket'  => 'buckname', 
     'Key'  => $destination, 
     'SourceFile' => $source, 
     'ContentType' =>'image/jpeg', //<-- this is what you need! 
     'ACL'   => 'public-read'//<-- this makes it public so people can see it 
    ));