Amazon S3 неправильно работает с файлами
Я сделал этот сайт для своего друга, и я загрузил его в ведро Amazon S3 (http://ballard26.s3.amazonaws.com/index.html), и когда я перехожу на этот сайт страница не загружается правильно, и я понятия не имею, почему. Любые идеи?
Например, stylesheet.css
загружается неправильно. Если вы перейдете к http://ballard26.s3.amazonaws.com/stylesheet.css, он загрузит файл вместо загрузки его как CSS.
Ответы
Ответ 1
Проверьте типы mime (заголовок типа содержимого HTTP) в файлах, которые вы загрузили. S3 не всегда правильно устанавливает их. Возможно, вам придется установить их в вызове API загрузки. Некоторые библиотеки загрузки сделают это для вас.
Если типы mime неверны, когда файл загружен из браузера с S3, если тип mime установлен неправильно, он не всегда будет отображаться правильно.
Ответ 2
Файлы CSS по умолчанию имеют тип MIME octet/binary
. Чтобы исправить это, войдите в свою консоль управления AWS, перейдите в раздел Amazon S3 и найдите соответствующий ковш. Найдите файл CSS и выберите "Свойства". В разделе "Метаданные" установите для параметра Content-Type значение: text/css
Если вы используете приложение Panics Transmit для Mac OS X, вы можете установить пользовательский заголовок загрузки для файлов CSS Content-Type: text/css
, который будет применять правильный тип MIME каждый раз, когда вы загружаете файл, устраняя необходимость вручную установить это в вашей консоли каждый раз.
Больше информации об этом в Adam Wilcoxs сообщение в блоге.
Ответ 3
Я бы предположил, что при загрузке файла вы не указали или не установили mime-тип файла. В результате он не выполняет binary/octet-stream
.
Когда вы загружаете свою страницу, ваш браузер предполагает, что указанная вами таблица стилей не является файлом CSS, поскольку она обслуживается с типом контента, отличным от text/css
, и поэтому не применяет таблицу стилей.
Ответ 4
У меня была такая же проблема в 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'