我正在尝试通过Python将图像上传到S3。我的代码如下所示:
import os
from PIL import Image
import boto
from boto.s3.key import Key
def upload_to_s3(aws_access_key_id, aws_secret_access_key, file, bucket, key, callback=None, md5=None, reduced_redundancy=False, content_type=None):
conn = boto.connect_s3(aws_access_key_id, aws_secret_access_key)
bucket = conn.get_bucket(bucket, validate=False)
k = Key(bucket)
k.key = key
k.set_contents_from_file(file)
AWS_ACCESS_KEY = "...."
AWS_ACCESS_SECRET_KEY = "....."
filename = "images/image_0.jpg"
file = Image.open(filename)
key = "image"
bucket = 'images'
upload_to_s3(AWS_ACCESS_KEY, AWS_ACCESS_SECRET_KEY, file, bucket, key)
我收到此错误消息:
S3ResponseError: S3ResponseError: 400 Bad Request
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>InvalidRequest</Code><Message> The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.</Message>
<RequestId>90593132BA5E6D6C</RequestId>
<HostId>...</HostId></Error>
此代码基于本网站的教程:http://stackabuse.com/example-upload-a-file-to-aws-s3/
我已经尝试了k.set_contents_from_file以及k.set_contents_from_filename,但两者似乎都不适合我。
错误说明了使用AWS4-HMAC-SHA256,但我不知道该怎么做。除了使用AWS4-HMAC-SHA256之外,还有其他方法可以解决这个问题吗?如果有人可以帮助我,我会非常感激。
谢谢!
答案 0 :(得分:3)
只需使用:
import boto3
client = boto3.client('s3', region_name='us-west-2')
client.upload_file('images/image_0.jpg', 'mybucket', 'image_0.jpg')
尽量避免将您的凭据放入代码中。代替:
aws configure
命令将凭据存储在一个文件中,该代码会自动使用该文件。