2012-02-07 29 views
5

Theo docs, contentType là tùy chọn và , nó sẽ cố gắng xác định loại mime chính xác dựa trên đuôi tệp. Tuy nhiên, nó không bao giờ dường như đoán mime-type và luôn luôn mặc định là application/octet-streamCác tệp S3 của Amazon được tải lên bằng AWS SDK cho PHP luôn là “application/octet-stream”?

Dưới đây là mã của tôi:

$s3 = new AmazonS3(); 

$opt = array( 'fileUpload' => $_FILES['file']['tmp_name'], 
       'storage'  => Amazons3::STORAGE_REDUCED); 

$r = $s3->create_object('mybucket', $_FILES['file']['name'], $opt); 

Dưới đây là một ảnh chụp màn hình của giao diện điều khiển AWS của tôi:

enter image description here

Làm cách nào để bạn thực sự tự động đặt Loại nội dung phù hợp mà không đặt tùy chọn contentType, hoặc bạn có thực sự phải đặt thủ công không?

Thông tin bổ sung: Nếu tôi tải xuống tệp từ bảng điều khiển (mà ban đầu tôi tải lên qua SDK), sau đó tải lên lại bằng bảng điều khiển, Loại nội dung phù hợp được đặt (ví dụ: hình ảnh/gif cho tệp GIF thay vì đăng ký/octet-stream)

Trả lời

6

Cố gắng thêm khóa 'contentType' vào mảng tùy chọn của bạn khi tạo đối tượng và sử dụng 'body' thay vì 'fileUpload'. Ví dụ:

$s3->create_object('MY_BUCKET', 'xml_file.xml', array(
             'body' => '<xml>Valid xml content</xml>', 
             'contentType' => 'text/xml' 
            )); 

Tạo tệp thành công với loại nội dung văn bản/xml. Như tôi biết, Content-Type không được đặt tự động khi tải lên thông qua SDK. Nhưng đâu là vấn đề để loại bỏ loại mime từ phía PHP và thiết lập thuộc tính 'contentType'?

+1

Có Tôi luôn có thể đặt contentType nhưng có nghĩa là tài liệu nói rằng nó được thực hiện tự động: * Nếu tệp đang được tải lên qua tệpTải lên dưới dạng đường dẫn hệ thống tệp, tệp sẽ cố gắng xác định đúng loại dựa trên mime trên tiện ích mở rộng tệp. * nhưng điều đó không xảy ra vì vậy có thể có lỗi. – IMB

+1

'ContentType' với vốn' C'. Nếu không nó không hiệu quả với tôi. –

+0

Câu trả lời ở trên đã hiệu quả đối với tôi cho đến khi tôi chuyển sang SDK mới. Tôi không thể làm cho nó hoạt động nữa: http://stackoverflow.com/questions/21892352/specify-content-type-in-aws-phps-upload-function –

1

Tôi vừa mới gặp phải tình huống này, khi tải lên một số tệp, Loại nội dung không được tự động phát hiện. Tôi không thể tìm ra nguyên nhân là gì cho đến khi tôi bước qua mã xem thực thi SDK. Tôi phát hiện ra rằng hàm CFMimeTypes :: get_mimetype(), được sử dụng để tự động xác định Kiểu nội dung, sử dụng so sánh phân biệt chữ hoa chữ thường để xác định loại MIME. Bởi vì chỉ có phần mở rộng chữ thường này sẽ khớp. Nếu phần mở rộng tệp của bạn là chữ hoa hoặc chữ hoa, thì nó sẽ không khớp và dự phòng với kiểu MIME 'application/octet-stream'.

Để khắc phục thay đổi dòng:

'fileUpload' => $_FILES['file']['tmp_name'] 

để

'fileUpload' => strtolower($_FILES['file']['tmp_name']) 

Tôi đang sử dụng SDK v 1.5.8.2, nhưng có không nhìn được bất kỳ thay đổi để phát hiện này trong 1,5,9 hoặc 1,5,10 bản phát hành đã xuất hiện trong tuần qua. Tôi coi đây là một lỗi và sẽ nộp nó như vậy.

+0

Phát hiện loại MIME tự động đã được sửa trong phiên bản SDK 1.5 .15. – Brady

Các vấn đề liên quan