Boto3客户端upload_fileobj抛出错误NoSuchBucket

时间:2018-04-01 22:10:05

标签: python boto3

我正在尝试将文件上传到我的存储桶,即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_keyaws_secret_access_keyregioneu-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
我不明白发生了什么,但是当我从终端发送文件后,我的应用程序也开始工作了。我选择了像以前一样的文件。

2 个答案:

答案 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