将资产上传到S3无效

时间:2015-10-20 10:43:10

标签: python amazon-web-services amazon-s3 boto3

我需要将一个css文件和一个js文件上传到S3并将它们用作静态资源。如果我从S3页面通过网络上传它们,它可以工作。但是,如果我通过python脚本上传,它会上传文件,但我不能让css看起来根本不起作用。

这是我的python代码,

s3 = boto3.resource('s3')
s3.meta.client.upload_file('sample.css', 'mybucket', 'sample_dir/sample.css', {'ACL': 'public-read'})

2 个答案:

答案 0 :(得分:5)

这里显着的条件是浏览器正确使用通过控制台上传的文件,但通过API上传的文件不是。

默认情况下,AWS / S3控制台会自动为许多上传的文件类型设置Content-Type:(对于CSS,这应该是text/css)...但API要求设置它通过你的代码。

但是,您似乎没有设置它,因此浏览器可能拒绝使用css,即使它成功下载,因为Content-Type:响应标头包含意外值。

(浏览器开发工具/控制台应显示错误或警告以确认此情况。)

答案 1 :(得分:4)

提及文件类型解决了这个问题。

s3 = boto3.resource('s3')
s3.meta.client.upload_file('sample.css', 'mybucket', 'sample_dir/sample.css', {'ACL': 'public-read','public-read','ContentType': 'text/css'})