使用Python的UploadedFile()实现图片上传和缩略图生成
发布时间:2023-12-17 05:30:05
在Python中,可以使用Django框架提供的UploadedFile()类来实现图片上传和生成缩略图的功能。
首先,我们需要在Django项目的settings.py文件中配置上传文件保存的路径。可以使用MEDIA_ROOT和MEDIA_URL两个配置项来设置上传文件的保存路径和可访问的URL。
# settings.py MEDIA_ROOT = os.path.join(BASE_DIR, 'media') MEDIA_URL = '/media/'
接下来,在Django的views.py文件中编写处理图片上传和生成缩略图的视图函数。我们需要使用Django提供的FileUploadHandler类来处理上传文件,并使用Pillow库来生成缩略图。
# views.py
from django.core.files.uploadedfile import UploadedFile
from django.shortcuts import render
from PIL import Image
import os
def upload(request):
if request.method == 'POST':
img_file = request.FILES.get('image')
# 保存原始图片
handle_uploaded_file(img_file)
# 生成缩略图
generate_thumbnail(img_file)
return render(request, 'upload.html')
def handle_uploaded_file(file):
destination = open(os.path.join('media', file.name), 'wb+')
for chunk in file.chunks():
destination.write(chunk)
destination.close()
def generate_thumbnail(file):
img = Image.open(file)
img.thumbnail((200, 200))
thumb_path = os.path.join('media', 'thumbnails', file.name)
img.save(thumb_path)
在上述代码中,首先在upload函数中获取POST请求中的图片文件对象。然后,调用handle_uploaded_file函数将图片文件保存到指定路径下的media文件夹中。
接着,调用generate_thumbnail函数来生成缩略图。首先,使用Pillow库的Image.open()函数打开上传的图片文件,并调用thumbnail()方法生成缩略图。最后,使用save()方法将缩略图保存到指定路径下的media/thumbnails文件夹中。
最后,在Django的模板文件upload.html中,编写文件上传的表单。
<!-- upload.html -->
<form method="POST" enctype="multipart/form-data" action="{% url 'upload' %}">
{% csrf_token %}
<input type="file" name="image">
<input type="submit" value="Upload">
</form>
这样,当用户选择一张图片文件并点击上传按钮时,上传的图片文件将被保存到media文件夹中,同时会生成一张缩略图保存到media/thumbnails文件夹中。
需要注意的是,在Django的urls.py文件中需要配置对应的URL路由,将upload视图函数映射到正确的URL。
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('upload/', views.upload, name='upload'),
]
以上就是使用Python的UploadedFile()实现图片上传和缩略图生成的示例,通过Django框架和Pillow库的结合,可以实现方便的图片上传和生成缩略图的功能。
