Атрибут size
Атрибут size класса UploadedFile предоставляет доступ к размеру загруженного файла в байтах. Это значение автоматически вычисляется Django при загрузке файла и может быть использовано для проверки ограничений, отображения информации о файле или логирования. Атрибут доступен только для чтения и возвращает целое число.
Синтаксис
uploaded_file.size
Где uploaded_file - экземпляр класса UploadedFile или его подклассов (TemporaryUploadedFile, InMemoryUploadedFile). Атрибут возвращает целое число (количество байт).
Пример
Рассмотрим простой пример получения размера файла в обработчике формы:
from django.shortcuts import render
from django.http import HttpResponse
def handle_upload(request):
if request.method == 'POST' and request.FILES.get('file'):
uploaded_file = request.FILES['file']
file_size = uploaded_file.size
return HttpResponse(f"File size: {file_size} bytes")
return render(request, 'upload_form.html')
Результат выполнения кода при загрузке файла размером 2 КБ:
"File size: 2048 bytes"
Пример
Пример проверки размера файла перед сохранением. Если размер превышает допустимый (1 МБ), возвращаем ошибку:
from django.shortcuts import render
from django.http import HttpResponse
MAX_SIZE = 1024 * 1024 # 1 MB
def upload_file(request):
if request.method == 'POST' and request.FILES.get('document'):
doc = request.FILES['document']
if doc.size > MAX_SIZE:
return HttpResponse("File size exceeds 1 MB limit", status=400)
# Сохранение файла
return HttpResponse("File uploaded successfully")
return render(request, 'upload_form.html')
Результат выполнения кода при попытке загрузить файл размером 1.5 МБ:
"File size exceeds 1 MB limit"
При успешной загрузке файла:
"File uploaded successfully"
Пример
Использование атрибута size для вывода информации о файле в модели:
from django.db import models
class Document(models.Model):
title = models.CharField(max_length=100)
file = models.FileField(upload_to='documents/')
uploaded_at = models.DateTimeField(auto_now_add=True)
def get_file_size(self):
if self.file and hasattr(self.file, 'size'):
return self.file.size
return None
# Использование в представлении
doc = Document.objects.get(id=1)
size = doc.get_file_size()
print(f"Document {doc.title} size: {size} bytes")
Результат выполнения кода:
"Document report size: 15360 bytes"
Смотрите также
-
атрибут
name,
который возвращает имя загруженного файла -
атрибут
content_type,
который возвращает MIME-тип файла -
атрибут
size,
который используется для файлов в хранилище -
метод
chunks,
который позволяет читать файл по частям