21

我为我的朋友制作了这个网站,并将其上传到了 Amazon S3 存储桶(http://ballard26.s3.amazonaws.com/index.html),当我访问该网站时,页面无法正确加载,我有不知道为什么。有任何想法吗?

例如,stylesheet.css无法正确加载。如果您访问http://ballard26.s3.amazonaws.com/stylesheet.css,它会下载文件而不是将其作为 CSS 加载。

4

4 回答 4

32

检查您上传的文件的 mime 类型(HTTP 内容类型标头)。S3 并不总是正确设置它们。您可能需要在上传 API 调用中设置它们。一些上传库会为您执行此操作。

如果从 S3 从浏览器下载文件时 mime 类型不正确,如果 mime 类型设置不正确,则不会始终正确呈现。

于 2010-04-11T18:32:53.020 回答
18

CSS 文件默认为 MIME 类型的octet/binary. 要更正此问题,请登录您的 AWS 管理控制台,转到 Amazon S3 部分并找到相关的存储桶。找到 CSS 文件并选择属性。在 Metadata 下,将 Content-Type 键设置为 value:text/css

如果您在 Mac OS X 上使用 Panic 的 Transmit 应用程序,您可以为 CSS 文件设置自定义上传标题,Content-Type: text/css每次上传文件时都会应用正确的 MIME 类型,无需每次在控制台中手动设置。

有关这方面的更多信息,请参阅 Adam Wilcox 的博客文章

于 2013-08-26T11:13:55.183 回答
5

我猜您在上传文件时没有正确指定或设置文件的 MIME 类型。结果,它默认为binary/octet-stream.

当您加载页面时,您的浏览器会假设您指定的样式表不是 CSS 文件,因为它使用的内容类型不是text/css,因此不应用样式表。

于 2010-04-11T18:45:25.910 回答
3

由于我们的 CSS / JS 文件的内容类型不正确,我在 IE 中遇到了同样的问题。

如果您使用 Ruby 和 AWS gem,请使用以下代码:

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'
于 2010-12-22T20:06:04.447 回答