S3网站下载文件而不是显示页面



我正试图用Terraform在S3上设置一个静态页面。当我访问端点时,浏览器会尝试下载文件,而不是显示页面。

resource "aws_s3_bucket" "b1" {
bucket = "my-bucket"
website {
index_document = "index.html"
error_document = "error.html"
}
tags = {
Name        = "my bucket"
Environment = "dev"
}
}
resource "aws_s3_bucket_policy" "bucket_policy" {
bucket = aws_s3_bucket.b1.id
policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
EOF
}
resource "aws_s3_bucket_object" "object" {
bucket = aws_s3_bucket.b1.id
key    = "index.html"
source = "myfiles/index.html"
etag   = filemd5("myfiles/index.html")
}

默认情况下,S3对象具有通用内容类型application/octet-stream,浏览器通常只通过下载文件来处理,因为没有足够的信息来选择更具体的处理。

可以使用content_type参数将不同的内容类型设置为aws_s3_bucket_object。HTML文件的预期内容类型是text/html,因此您可以这样配置对象:

resource "aws_s3_bucket_object" "object" {
bucket       = aws_s3_bucket.b1.id
key          = "index.html"
source       = "myfiles/index.html"
etag         = filemd5("myfiles/index.html")
content_type = "text/html"
}

如果您有不同类型的各种对象要上传,您可能会发现使用共享模块hashicorp/dir/template更容易,该模块在其实现中包括从文件名后缀到适当的content_type值的默认映射表,因此您可以潜在地处理具有传统文件名后缀的文件目录,然后将结果系统地映射到S3对象中。

相关内容

  • 没有找到相关文章

最新更新