使用Boto3在S3中的AWS内容类型设置

Rup*_*ert 18 python amazon-s3 amazon-web-services

我正在尝试使用亚马逊的Boto3 SDK for Python 将网页上传到S3存储桶.

我无法设置Content-Type.Content-Type除了使用此代码指定的元数据之外,AWS还不断创建新的元数据键:

# Upload a new file
data = open('index.html', 'rb')
x = s3.Bucket('website.com').put_object(Key='index.html', Body=data)
x.put(Metadata={'Content-Type': 'text/html'})
Run Code Online (Sandbox Code Playgroud)

如何设置任何指导Content-Type,以text/html将不胜感激.

Mic*_*bot 32

Content-Type不是自定义元数据,这是Metadata用于.它有自己的属性,可以像这样设置:

bucket.put_object(Key='index.html', Body=data, ContentType='text/html')
Run Code Online (Sandbox Code Playgroud)

注意:.put_object()可以设置多个Content-Type.查看Boto3文档以了解其余部分.


Jhe*_*sly 22

您也可以使用upload_file()方法和ExtraArgs关键字(并将权限设置为World read):

import boto3
s3 = boto3.resource('s3')
s3.meta.client.upload_file('source_file_name.html', 'my.bucket.com', 'aws_file_name.html', ExtraArgs={'ContentType': "application/json", 'ACL': "public-read"} )
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的方法。看起来您正在“ExtraArgs”中的“Metadata”字典中设置密钥 (6认同)
  • 答案错误,它将设置'x-amz-meta-contenttype'='application / json',而不是'Content-Type' (2认同)

小智 8

使用 Boto3 的示例 - 使用“ExtraArgs”参数

s3 = boto3.client('s3', aws_access_key_id = AWS_ACCESS_KEY_ID, aws_secret_access_key = AWS_SECRET_ACCESS_KEY, region_name = "us-east-1")
    
s3.upload_file(file_path, s3_bucket, file_name, ExtraArgs={'ContentType': "application/json"})
Run Code Online (Sandbox Code Playgroud)