我可以通过AJAX成功地将图像上传到s3。但是我需要在我的s3桶里有一个附带的缩略图。在
以下是我的s3 upload 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函数代替它是否可行?在
任何建议都可以。在
编辑:
可以通过两种方式上传文件:从磁盘上传图像和从URL上传图像。文件名取自在我的前端生成的随机字符串。在
^{pr2}$def img_from_url(file):
image_data = requests.get(file).content
return ContentFile(image_data)
生成缩略图有三种基本方法(可能更多!)。在
在别处生成
上传原始文件时只需上传一个附加文件。缩略图需要在系统外部生成。在
使用AWS Lambda函数生成缩略图
当图像上传到amazons3时,它可以生成一个运行AWS Lambda函数的事件。然后Lambda函数可以创建一个新的、调整大小的图像。在
有关示例,请参见:Tutorial: Using AWS Lambda with Amazon S3 - AWS Lambda
使用外部服务
与其存储缩略图,不如使用外部服务动态生成缩略图。一些此类服务包括:
使用OpenCV调整图像大小并将其编码为字节,然后让Boto3将这些字节上传到S3,并为缩略图指定一个新的键名:
相关问题 更多 >
编程相关推荐