我正在尝试在我的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">
获取的文件流?
答案 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来管理上传。如果您需要详细信息,我可以在此处加入。