Amazon S3 неправильно обслуживает файлы - PullRequest
20 голосов
/ 11 апреля 2010

Я создал этот сайт для своего друга и загрузил его в корзину Amazon S3 (http://ballard26.s3.amazonaws.com/index.html)), и когда я захожу на этот сайт, страница загружается некорректно, и я не знаю, почему.

Например, stylesheet.css загружается неправильно. Если вы перейдете на http://ballard26.s3.amazonaws.com/stylesheet.css,, он загружает файл, а не загружает его как CSS.

Ответы [ 4 ]

30 голосов
/ 11 апреля 2010

Проверьте типы mime (заголовок типа содержимого HTTP) в загруженных файлах. S3 не всегда устанавливает их правильно. Возможно, вам придется установить их при вызове API загрузки. Некоторые загружаемые библиотеки сделают это за вас.

Если типы MIME не верны, когда файл загружается из браузера из S3, если тип MIME установлен неправильно, он не всегда будет отображаться правильно.

15 голосов
/ 26 августа 2013

CSS-файлы по умолчанию имеют тип MIME octet/binary. Чтобы исправить это, войдите в консоль управления AWS, перейдите в раздел Amazon S3 и найдите соответствующий сегмент. Найдите файл CSS и выберите «Свойства». В разделе «Метаданные» установите для ключа типа содержимого значение: text/css

Если вы используете приложение Panic Transmit для Mac OS X, вы можете установить для пользовательского заголовка загрузки для файлов CSS значение Content-Type: text/css, которое будет применять правильный тип MIME при каждой загрузке файла, устраняя необходимость вручную устанавливать его в ваша консоль каждый раз.

Больше информации об этом есть в блоге Адама Уилкокса .

4 голосов
/ 11 апреля 2010

Я полагаю, что вы не указали или не установили mime-тип файла должным образом при загрузке файла. В результате по умолчанию он равен binary/octet-stream.

Когда вы загружаете свою страницу, ваш браузер предполагает, что указанная вами таблица стилей не является файлом CSS, поскольку она обслуживается с типом содержимого, отличным от text/css, и поэтому не применяет таблицу стилей.

3 голосов
/ 22 декабря 2010

У меня была такая же проблема в IE из-за неправильного типа содержимого наших файлов CSS / JS.

Если вы используете Ruby и гем AWS, используйте код такой:

s3 = Aws::S3Interface.new($s3[:s3_access_key_id],$s3[:s3_secret_access_key],{:multi_thread => true});
s3.put($s3[:s3_bucket],s3_path,file[:tempfile].read,{'x-amz-acl' => 'public-read', 'content-type' => 'text/css' })

Обратите внимание на разный синтаксис метаданных S3:

'content-type' => 'text/css'
...