Xử lý file trong Django

Subscribe to my newsletter and never miss my upcoming articles

Đối tượng File

Lớp File

class File(file_object, name=None)

Lớp File là lớp bao đối tượng file của Python với một số bổ sung được cung cấp bởi Django. Ở bên trong, Django sử dụng lớp này khi cần biểu diễn một file.

Đối tượng File có thêm những thuộc tính và phương thức sau đây:

name

Tên của file, bao gồm đường dẫn tương đối so với MEDIA_ROOT.

size

Kích thước của file, tính theo đơn vị byte.

file

Đối tượng file của Python.

mode

Chế độ đọc/ghi của file.

open(mode=None)

Mở/mở lại file với chế độ được xác định bởi mode.

close()

Đóng file.

chunks(chunk_size=None)

Lặp qua file và tạo ra các mảnh nhỏ của file, kích thước mỗi mảnh được quy định bởi chunk_size, mặc định là 64 KB.

multiple_chunks(chunk_size=None)

Trả về True nếu file đủ lớn để cần phải chia nhỏ bằng chunks().

Ngoài ra đối tượng File cũng có những thuộc tính và phương thức của đối tượng file Python thông thường.

Lớp con của File

ContentFile(content, name=None)

Chuyên hoạt động trên các nội dung dạng chuỗi. Ví dụ:

from django.core.files.base import ContentFile

f1 = ContentFile("esta frase está en español")
f2 = ContentFile(b"these are bytes")

ImageFile(file_object, name=None)

Chuyên hoạt động trên các file ảnh, django.core.files.images.ImageFile thừa kế tất cả các thuộc tính và phương thức của File, và có thêm các thuộc tính sau:

  • width: chiều rộng của ảnh.
  • heigth: chiều cao của ảnh.

Các phương thức bổ sung của File

Khi một đối tượng File là thuộc tính của một thực thể của model, nó có thêm các phương thức sau:

save(name, content, save=True)

Lưu một file mới với tên và nội dung được cung cấp. Nó không thay thế file hiện tại, nhưng sẽ tạo một file mới và cập nhật lại đối tượng model để trỏ tới file mới này. Nếu saveTrue, phương thức save()của model được gọi sau khi file đã được lưu.

Hai dòng lệnh sau:

>>> car.photo.save('myphoto.jpg', content, save=False)
>>> car.save()

tương đương với:

>>> car.photo.save('myphoto.jpg', content, save=True)

Đối số content phải là một thực thể của File hoặc lớp con của File.

delete(save=True)

Xóa file khỏi thực thể của model và xóa file khỏi ổ cứng. Nếu saveTrue, phương thức save() của model được gọi sau khi file bị xóa khỏi ổ cứng.

Đối tượng UploadedFile

Lớp UploadedFile

Trong quá trình upload, các file thực tế được lưu trong request.FILES. Mỗi file trong từ điển này là một đối tượng UploadedFile.

Dưới đây là các phương thức và thuộc tính của UploadedFile.

read()

Đọc toàn bộ dữ liệu đã upload từ file. Nếu file lớn bạn nên đọc nó theo từng mảnh nhỏ bằng cách sử dụng chunks().

multiple_chunks(chunk_size=None)

Trả về True nếu file đã upload đủ lớn để cần phải đọc nó theo từng mảnh nhỏ. Mặc định là những file lớn hơn 2,5 MB.

chunks(chunk_size=None)

Một generator trả về các mảnh nhỏ của file. Nếu multiple_chunks()True, bạn nên sử dụng phương thức này thay vì sử dụng phương thức read().

Trong thực thế, chunks() luôn được sử dụng.

name

Tên của file đã upload (ví dụ: my_file.txt)

size

Kích thước của file đã upload, tính theo đơn vị byte.

content_type

Là header Content-Type của request mà file đã được gửi cùng (ví dụ: text/plain hoặc application/pdf). Tuy nhiên, bạn không nên tin vào content_type bởi người dùng có thể dễ dàng giả mạo nó. Do vậy cần phải kiểm tra nội dung file có phù hợp với content_type hay không.

charset

Với các content-type dạng text/*, đây là charset (ví dụ utf8) được cung cấp bởi trình duyệt. Bạn không nên tin vào dữ liêu này do trình duyệt cung cấp.

Nguồn: https://docs.djangoproject.com/en/3.2/ref/files/

No Comments Yet