我需要上传一个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'})
这里值得注意的是,通过控制台上传的文件可以被浏览器正确使用,而通过API上传的文件则不能。
默认情况下,AWS/S3控制台自动为许多上传的文件类型设置Content-Type:
(对于CSS,可能应该是text/css
)…但是API要求它由你的代码设置。
但是,你似乎没有设置它,所以浏览器可能会拒绝使用css,即使它下载成功,因为Content-Type:
响应头包含一个意外的值。
(浏览器开发工具/控制台应该显示一个错误或警告来确认)。
提到文件类型就解决了这个问题。
s3 = boto3.resource('s3')
s3.meta.client.upload_file('sample.css', 'mybucket', 'sample_dir/sample.css', {'ACL': 'public-read','public-read','ContentType': 'text/css'})