Amazon S3无法正确提供文件

时间:2010-04-11 18:24:28

标签: amazon-s3 amazon-web-services content-type bucket

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

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

4 个答案:

答案 0 :(得分:30)

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

如果在没有正确设置mime类型的情况下从S3从浏览器下载文件时mime类型不正确,则它将无法始终正确呈现。

答案 1 :(得分:15)

CSS文件默认为MIME类型octet/binary。要更正此问题,请登录AWS管理控制台,转至Amazon S3部分并查找相关存储桶。找到CSS文件,然后选择“属性”。在“元数据”下,将“内容类型”键设置为值:text/css

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

有关这方面的更多信息,请参阅Adam Wilcox的blog post

答案 2 :(得分:4)

我猜你在上传文件时没有正确指定或设置文件的mime类型。因此,它默认为binary/octet-stream

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

答案 3 :(得分: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'