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