python / intermediate
Snippet
Django Dateiuploads mit ImageField Validierung
Dateiuploads erfordern mehrere Validierungsschichten: Magic-Byte-Erkennung verhindert Extension-Spoofing, Größenlimits verhindern Speicher-Missbrauch, und Dimensionsprüfungen stellen sicher dass Bilder Anforderungen erfüllen.
snippet.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from django import formsfrom django.core.exceptions import ValidationErrorimport magicclass ProfilePictureForm(forms.Form):picture = forms.ImageField()def clean_picture(self):image = self.cleaned_data['picture']# Validate file type using magic bytesmime_type = magic.from_buffer(image.read(1024), mime=True)image.seek(0) # Reset file pointer after readingallowed_types = ['image/jpeg', 'image/png', 'image/webp']if mime_type not in allowed_types:raise ValidationError('Unsupported file format')# Validate file size (max 5MB)if image.size > 5 * 1024 * 1024:raise ValidationError('Image size cannot exceed 5MB')# Validate dimensionsimg = Image.open(image)if img.width < 200 or img.height < 200:raise ValidationError('Image must be at least 200x200 pixels')return image
django
Erklärung
1
magic.from_buffer()
Erkennt echten MIME-Typ durch Lesen der Datei-Magic-Bytes
2
image.size
Dateigröße in Bytes vom hochgeladenen File-Objekt
3
Image.open(image)
PIL/Pillow validiert echte Bildabmessungen