[英]Problems uploading files to Amazon s3 bucket from a website on heroku
我正在将Django网站移至Heroku。 但是我不知道如何在Amazon s3存储桶中使用Heroku。 以前,我曾经将所有上载的文件保存在项目中,但是我无法使用Heroku做到这一点。
我一直在关注Heroku上的文档: https : //devcenter.heroku.com/articles/s3和https://devcenter.heroku.com/articles/s3-upload-python该存储桶位于法兰克福。
上传文件时出现以下错误:
<Error>
<Code>InvalidArgument</Code>
<Message>a non-empty Access Key (AKID) must be provided in the credential.</Message>
<ArgumentName>X-Amz-Credential</ArgumentName>
<ArgumentValue>/20180502/eu-central-1/s3/aws4_request</ArgumentValue>
…
</Error>
我已经在Heroku中指定了这样的键:“ heroku config:set AWS_ACCESS_KEY_ID = xxx AWS_SECRET_ACCESS_KEY = yyy”
您可以转到https://eventcollective.herokuapp.com/accounts/account/并尝试上传图片。
从views.py
def sign_s3(request):
S3_BUCKET = os.environ.get('S3_BUCKET')
print(S3_BUCKET)
file_name = request.GET.get('file_name')
file_type = request.GET.get('file_type')
s3 = boto3.client('s3', region_name='eu-central-1')
presigned_post = s3.generate_presigned_post(
Bucket=S3_BUCKET,
Key=file_name,
Fields={"acl": "public-read", "Content-Type": file_type},
Conditions=[
{"acl": "public-read"},
{"Content-Type": file_type}
],
ExpiresIn=3600
)
return HttpResponse(json.dumps({
'data': presigned_post,
'url': 'https://%s.s3.amazonaws.com/%s' % (S3_BUCKET, file_name)
}))
您对如何解决这个问题有任何想法吗?
似乎在创建客户端对象时必须添加“ aws_access_key_id”和“ aws_secret_access_key”。
s3 = boto3.client(
's3',
region_name='eu-central-1',
aws_access_key_id='KEY',
aws_secret_access_key='KEY',
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.