django aws s3图像在上传时调整大小并访问各种调整大小的图像

时间:2017-11-20 02:25:00

标签: python django file-upload resize django-storage

我希望能够将上传的图片调整为各种尺寸类别:

  • 原始
  • 中(500kb)
  • 小(200kb)

并将其保存到AWS S3。后来才能访问它。 一种策略是将其保存在filename_small.jpg,filename_medium.jpg中,有一个辅助函数,可以附加_small,_medium来访问这些文件。我不知道如何保存所有不同的文件(已调整大小),然后使用帮助程序访问它。

https://gitlab.com/firdausmah/railercom/blob/master/railercomapp/storage_backends.py

class MediaStorage(S3Boto3Storage):
    location = 'media'
    file_overwrite = False

https://gitlab.com/firdausmah/railercom/blob/master/railercomapp/models.py

class Employee(models.Model):
...
    face_image = models.FileField(upload_to=upload_to('employee/face_image/'), blank=True, storage=MediaStorage())

https://gitlab.com/firdausmah/railercom/blob/master/railercomapp/api.py

@api_view(['POST'])
def update_employee_image(request):
...
    employee = Employee.objects.get(id = employee_id)
    employee.face_image = face_image_obj
    employee.save()

我正在使用django-storages和S3Boto3Storage。我的完整工作项目在git链接中。

1 个答案:

答案 0 :(得分:10)

根据您的使用案例,我建议使用与django-storages配合使用的sorl-thumbnail,并为您处理调整大小,这意味着您不必进行管理工作不同大小你自己。

您可以在要使用它们的位置定义缩略图大小,而不是定义用于存储图像的特定文件大小,例如

{% thumbnail item.image "300" crop="center" as im %}
    <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">
{% endthumbnail %}

这将生成maximum width 300px的缩略图,该缩略图将在第一次生成并保存在s3上。

如果您需要在模板上下文之外生成和获取缩略图,该应用程序有一个低级API:

from sorl.thumbnail import get_thumbnail

im = get_thumbnail(my_file, '100x100', crop='center', quality=99)