5

我正在尝试boto3在我的 django 项目中使用将文件上传到 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">

4

1 回答 1

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

于 2015-07-07T12:22:59.307 回答