django boto3:NoCredentialsError - 无法找到凭据

时间:2015-07-07 12:08:28

标签: django boto3

我正在尝试在我的django项目中使用boto3将文件上传到Amazon S3。凭证在settings.py

中定义
AWS_ACCESS_KEY = xxxxxxxx
AWS_SECRET_KEY = xxxxxxxx
S3_BUCKET = xxxxxxx

views.py

import boto3

s3 = boto3.client('s3')
path = os.path.dirname(os.path.realpath(__file__))
s3.upload_file(path+'/myphoto.png', S3_BUCKET, 'myphoto.png')

系统抱怨Unable to locate credentials。我有两个问题:

(a)我似乎应该创建一个凭据文件~/.aws/credentials。但是在django项目中,我该把它放在哪里?

(b)s3方法upload_file将文件路径/名称作为其第一个参数。我是否可以提供由表单输入元素<input type="file" name="fileToUpload">获取的文件流?

1 个答案:

答案 0 :(得分:1)

这是我用于直接上传的内容,我希望它能提供一些帮助。

import boto
from boto.exception import S3CreateError
from boto.s3.connection import S3Connection

conn = S3Connection(settings.AWS_ACCESS_KEY,
                    settings.AWS_SECRET_KEY,
                    is_secure=True)
try:
    bucket = conn.create_bucket(settings.S3_BUCKET)
except S3CreateError as e:
    bucket = conn.get_bucket(settings.S3_BUCKET)

k = boto.s3.key.Key(bucket)
k.key = filename
k.set_contents_from_filename(filepath)

不确定(a)但django在文件管理方面非常灵活。

关于(b)您也可以签署上传并直接从客户端进行操作以减少带宽使用,它也非常狡猾和安全。您需要使用一些JavaScript来管理上传。如果您需要详细信息,我可以在此处加入。