django boto3:NoCredentialsError——无法找到凭据

django boto3: NoCredentialsError -- Unable to locate credentials

我正在尝试在我的 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 将文件 path/name 作为其第一个参数。有没有可能我提供一个表单输入元素<input type="file" name="fileToUpload">得到的文件流?

这是我用来直接上传的,希望对大家有帮助。

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 来管理上传。如果您需要详细信息,我可以将它们包含在这里。