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

django

1个回答

写回答

Mr夜星空

2025-07-10 02:52

+ 关注

Django
Django

使用Django和AWS S3调整大小的图像上传和访问

在现代的Web应用程序中,图像上传和处理是非常常见的需求之一。在本文中,我们将介绍如何使用Django和AWS S3来上传和调整大小图像,并使其能够以不同的大小进行访问。

准备工作

在开始之前,我们需要确保已经完成以下准备工作:

1. 安装Django:在终端中运行pip install Django命令来安装Django框架。

2. 创建Django项目:在终端中运行Django-admin startproject myproject命令来创建一个新的Django项目。

3. 安装Boto3库:在终端中运行pip install boto3命令来安装Boto3库,用于与AWS S3进行交互。

4. 配置AWS S3:在AWS控制台上创建一个新的S3存储桶,并获取访问密钥和秘密密钥。

5. 配置Django项目:在Django项目的settings.py文件中添加以下配置:

Python

AWS_ACCESS_KEY_ID = 'your-access-key-id'

AWS_SECRET_ACCESS_KEY = 'your-secret-access-key'

AWS_STORAGE_BUCKET_NAME = 'your-bucket-name'

AWS_S3_REGION_NAME = 'your-region-name'

AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.{AWS_S3_REGION_NAME}.amazonaws.com'

AWS_S3_OBJECT_PARAMETERS = {

'CacheControl': 'max-age=86400',

}

AWS_DEFAULT_ACL = 'public-read'

上传和调整大小图像

现在,我们将创建一个简单的Django视图来处理图像上传和调整大小的功能。

Python

from PIL import Image

from io import BytesIO

from Django.core.files.uploadedfile import InMemoryUploadedFile

from Django.shortcuts import render

from myproject.settings import AWS_STORAGE_BUCKET_NAME

def upload_image(request):

if request.method == 'POST':

image = request.FILES['image']

image_name = image.name

image_file = Image.open(image)

# 调整图像大小

image_file.thumbnAIl((400, 400))

# 将调整大小后的图像保存到内存中

thumb_io = BytesIO()

image_file.save(thumb_io, format='JPEG')

# 创建InMemoryUploadedFile对象

thumb_file = InMemoryUploadedFile(

thumb_io,

None,

image_name,

'image/jpeg',

thumb_io.getbuffer().nbytes,

None

)

# 将调整大小后的图像上传到AWS S3

s3_client = boto3.client('s3')

s3_client.upload_fileobj(thumb_file, AWS_STORAGE_BUCKET_NAME, image_name)

return render(request, 'upload_success.html')

return render(request, 'upload.html')

在上面的代码中,我们使用Pillow库来调整图像的大小,并使用BytesIO来保存调整大小后的图像。然后,我们使用InMemoryUploadedFile对象创建一个新的文件对象,并将其上传到AWS S3。

访问不同大小的图像

现在,我们已经成功上传并调整大小了图像,接下来我们将介绍如何在不同大小上访问这些图像。

Python

from Django.shortcuts import render

from myproject.settings import AWS_S3_CUSTOM_DOMAIN

def view_image(request, image_name):

context = {

'image_name': image_name,

'image_url_400': f'AIN}/{image_name}',">https://{AWS_S3_CUSTOM_DOMAIN}/{image_name}',</a>

'image_url_200': f'https://{AWS_S3_CUSTOM_DOMAIN}/thumbnAIls/{image_name}',

}

return render(request, 'view_image.html', context)

在上面的代码中,我们使用AWS_S3_CUSTOM_DOMAIN来构建图像的访问URL。我们创建了两个不同大小的图像URL,一个是原始大小的图像URL,另一个是400x400大小的缩略图URL。

通过使用Django和AWS S3,我们可以轻松地上传和调整大小图像,并以不同大小访问它们。这种方法为我们提供了灵活性和可扩展性,以应对不同的图像处理需求。

在本文中,我们介绍了如何准备工作、上传和调整大小图像,以及如何访问不同大小的图像。希望这些信息对您有所帮助,让您能够更好地处理图像上传和处理的需求。

如果您有任何问题或疑问,请随时在下方留言,我们将尽力解答。谢谢阅读!

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号