我正在尝试将文件上传到我的存储桶,即test-bucket
...
所以,我指定了一个常量AWS_S3_BUCKET="test-bucket"
并定义了下一个函数(来自一些教程或论坛):
import boto3
from config import AWS_S3_LOCATION
s3 = boto3.client('s3')
def upload_file_to_s3(file, bucket_name, acl="public-read"):#bucket_name=AWS_S3_BUCKET
try:
s3.upload_fileobj(
file,
bucket_name,
file.filename,
ExtraArgs={
"ACL": acl,
"ContentType": file.content_type
}
)
except Exception as e:
print("Something Happened: ", e)
return e
return "{}{}".format(AWS_S3_LOCATION, file.filename)
我的 config.py :
import os
AWS_S3_BUCKET = os.environ['AWS_S3_BUCKET']
AWS_S3_LOCATION = 'http://{}.s3.amazonaws.com/'.format(AWS_S3_BUCKET)
DEBUG = True
PORT = 5000
我已经安装了AWS Cli,我设置了aws_access_key
,aws_secret_access_key
和region
(eu-west-1
)。
但是当我尝试上传文件时出现错误:
An error occurred (NoSuchBucket) when calling the PutObject operation: The specified bucket does not exist
{'Error': {'Code': 'NoSuchBucket', 'Message': 'The specified bucket does not exist', 'BucketName': 'test-bucket'}, 'ResponseMetadata': {'RequestId': 'blah-blah', 'HostId': 'blah-blah', 'HTTPStatusCode': 404, 'HTTPHeaders': {'x-amz-request-id': 'blah-blah', 'x-amz-id-2': 'blah-blah', 'content-type': 'application/xml', 'transfer-encoding': 'chunked', 'date': 'Sun, 01 Apr 2018 21:59:44 GMT', 'connection': 'close', 'server': 'AmazonS3'}, 'RetryAttempts': 0}}
有什么不对?
ADDED
使用AWS CLI从终端上传工作:
aws s3api put-object --bucket test-bucket --key test.txt --body test.txt
ADDEDv2
我不明白发生了什么,但是当我从终端发送文件后,我的应用程序也开始工作了。我选择了像以前一样的文件。
答案 0 :(得分:1)
首先要检查的是该地区。如果您安装了CLI,则可能在unix上的.aws中的主文件夹中具有凭据和配置,而不确定Windows here is more info on the config files上的位置。您的配置应该包含以下区域: .aws /配置:
[default]
region = eu-west-1
如果您使用网络界面创建了存储分区,则您的区域位于右上角。我认为默认情况下它是North Virginia,对应于us-east-1 (full list here)。你可能想选择爱尔兰。
配置文件允许您拥有多个配置文件(例如,dev和prd)more here
答案 1 :(得分:-1)
您是否忘记了导入行中的AWS_S3_BUCKET?目前它只说:from config import AWS_S3_LOCATION