【发布时间】:2018-11-19 14:15:20
【问题描述】:
我可以通过 AJAX 成功地将我的图像上传到 s3。但是,我还需要在我的 s3 存储桶中有一个随附的缩略图。
这是我的 s3 上传 ajax 视图:
...
session = boto3.Session(
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
)
s3 = session.resource('s3')
s3.Bucket('****-bucket').put_object(Key='media/%s' % random_filename, Body=img, ContentType='image/png')
return HttpResponse()
从我的代码创建和上传缩略图的最佳方式是什么?我是否要在当前的下方添加另一个put_object?如果是这样,我如何实现像 PIL 这样的缩略图生成器?我试图复制this answer,但设置与我的完全不同。
或者使用 AWS lambda 函数是否可行?
任何建议表示赞赏。
编辑:
文件可以通过 2 种方法上传:来自磁盘的图像和来自 URL 的图像。文件名取自我前端生成的随机字符串。
def upload_image(request):
random_filename = request.POST.get('random_filename')
if request.is_ajax():
if request.FILES:
for file in request.FILES:
if file == "image":
img = request.FILES.get('image')
else:
img = request.POST.get('imageURL')
img = img_from_url(img)
session = boto3.Session(
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
)
s3 = session.resource('s3')
s3.Bucket('****-bucket').put_object(Key='media/%s' % random_filename, Body=img, ContentType='image/png')
def img_from_url(file):
image_data = requests.get(file).content
return ContentFile(image_data)
【问题讨论】:
-
旁注:将凭证与源代码一起存储不是一个好主意。相反,在具有分配的 IAM 角色(将自动提供凭证)的 Amazon EC2 实例上运行代码或通过
aws configure创建凭证文件。 -
凭据与源代码分开 - 在我的项目文件之外的
.env文件夹中。
标签: python django amazon-web-services amazon-s3 python-imaging-library