Атрибут size

Атрибут size класса UploadedFile предоставляет доступ к размеру загруженного файла в байтах. Это значение автоматически вычисляется Django при загрузке файла и может быть использовано для проверки ограничений, отображения информации о файле или логирования. Атрибут доступен только для чтения и возвращает целое число.

Синтаксис

pythonuploaded_file.size

Где uploaded_file - экземпляр класса UploadedFile или его подклассов (TemporaryUploadedFile, InMemoryUploadedFile). Атрибут возвращает целое число (количество байт).

Пример

Рассмотрим простой пример получения размера файла в обработчике формы:

pythonfrom 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 КБ:

python"File size: 2048 bytes"

Пример

Пример проверки размера файла перед сохранением. Если размер превышает допустимый (1 МБ), возвращаем ошибку:

pythonfrom 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 МБ:

python"File size exceeds 1 MB limit"

При успешной загрузке файла:

python"File uploaded successfully"

Пример

Использование атрибута size для вывода информации о файле в модели:

pythonfrom 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")

Результат выполнения кода:

python"Document report size: 15360 bytes"

Смотрите также

  • атрибут name,
    который возвращает имя загруженного файла
  • атрибут content_type,
    который возвращает MIME-тип файла
  • атрибут size,
    который используется для файлов в хранилище
  • метод chunks,
    который позволяет читать файл по частям