我为我的朋友创建了这个网站,并将其上传到Amazon S3存储桶(http://ballard26.s3.amazonaws.com/index.html),当我访问该网站时,页面无法正确加载,我不明白为什么。有什么想法吗?
例如,stylesheet.css
无法正确加载。如果你转到http://ballard26.s3.amazonaws.com/stylesheet.css,它会下载文件而不是将其加载为CSS。
答案 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'