Làm cách nào để lấy kích thước tệp trong Django?

Ứng dụng Django này thêm một loại trường mới, ConstrainedFileField, có khả năng kiểm tra kích thước và loại tệp. Cũng cung cấp trình kiểm tra javascript cho trường biểu mẫu

Lưu ý về tấn công DOS

Lưu ý quan trọng. việc kiểm tra kích thước tệp được thực hiện bởi Django sau khi toàn bộ tệp đã được tải lên máy chủ và được lưu trữ trong thư mục tạm thời [hoặc trong bộ nhớ nếu tệp nhỏ]. Do đó, điều này rất hữu ích để đảm bảo hạn ngạch của người dùng, chẳng hạn, nhưng sẽ không ngăn được người dùng tấn công muốn chặn máy chủ bằng cách gửi các tệp lớn [e. g. vài Gb]

Để tránh điều này, bạn cần định cấu hình giao diện người dùng của mình để giới hạn kích thước của các tệp được tải lên. Làm thế nào để làm điều đó phụ thuộc vào phần mềm bạn đang sử dụng. Ví dụ bạn dùng apache thì nên dùng directive

Đây là một biện pháp bổ sung, bởi vì bạn thường muốn người dùng bình thường vượt quá kích thước một lượng hợp lý để nhận được thông báo xác thực biểu mẫu thân thiện, trong khi người dùng tấn công sẽ thấy kết nối của họ bị cắt đột ngột như thế nào trước khi tệp tải lên xong. Vì vậy, cài đặt được đề xuất là cung cấp cho max_upload_size một giá trị nhỏ [e. g. 5Mb] và LimitRequestBody cao hơn [e. g. 100Mb]

Django có một buildi , do đó bạn có thể sử dụng cái này với

{{ file.size|filesizeformat }}

như tài liệu nói, điều này sẽ

Định dạng giá trị như kích thước tệp 'con người có thể đọc được' [i. e. '13 KB', '4.1 MB', '102 bytes', v.v. ]

Vì xác thực tệp đầu vào là một bước phổ biến được sử dụng rộng rãi trong các API ứng dụng nên việc tạo một trình xác thực riêng và sử dụng lại nó sẽ hiệu quả hơn

Yêu cầu

pip install python-magic. pip install python-magic-bin==0.4.14 tự động đáp ứng sự phụ thuộc của libmagic. Tuy nhiên, rất có khả năng gây ra sự cố phụ thuộc với nhiều tính năng AWS khác nhau. Do đó, đi với python-magic

brew install libmagic. Điều này là bắt buộc nếu bạn sử dụng python-magic và một giải pháp thay thế [được cho là] ​​pip install python-libmagic không hoạt động với tôi vì một số lý do không xác định

Hướng dẫn này dựa trên việc giới hạn kích thước tệp tải lên hoặc giới hạn giới hạn mà chúng tôi có thể lưu trữ một lượng lớn dữ liệu với ít dữ liệu lưu trữ hơn. Bạn có thể muốn giới hạn nó ở một lượng nhất định để lưu trữ dữ liệu lớn bằng cách sử dụng ít dung lượng hơn

Các bước cơ bản

Hãy bắt đầu hướng dẫn này bằng cách làm theo các bước dưới đây

  1. Bắt đầu một dự án
  2. Bắt đầu một ứng dụng
  3. Tạo siêu người dùng

Trình xác thực. py để kiểm tra kích thước của tệp

Bây giờ chúng ta sẽ tạo một tệp có tên là trình xác thực. py bên trong dự án của chúng tôi sẽ có chức năng kiểm tra kích thước của tệp
Nếu kích thước tệp lớn hơn 10Mb, nó sẽ hiển thị lỗi cho biết kích thước tối đa để tải tệp lên là 10Mb. Bạn cũng có thể thay đổi nó bằng cách chuyển đổi megabyte thành byte

Tạo một tệp có tên trình xác thực. py và mã đoạn mã dưới đây

from django.core.exceptions import ValidationError


def validate_file_size[value]:
    filesize= value.size
    
    if filesize > 10485760:
        raise ValidationError["You cannot upload file more than 10Mb"]
    else:
        return value

Mô hình để tải tệp lên bằng cách xác thực kích thước tệp trong Django

Tạo một mô hình để tải lên và kiểm tra các trình xác thực mà chúng tôi đã tạo

from django.db import models
from validators import validate_file_size


class upload_file[models.Model]:
    file_name=models.CharField[max_length=50]
    path=models.FileField[validators=[validate_file_size]]
    def __str__[self]:
        return self.file_name

Đây là một mô hình rất đơn giản để tải lên một tệp trong đó các thuộc tính của tệp là tên_tệp và đường dẫn có các trường tương ứng là CharField và FileField. Ở đây chúng tôi đã sử dụng trình xác thực được tạo trong trình xác thực. tập tin py

Bạn cần đưa ứng dụng của mình vào ứng dụng đã cài đặt trong phần cài đặt. py

Cũng đừng quên đăng ký mô hình của bạn trong quản trị viên. py

Chúng tôi đã tạo trình xác thực. py và mô hình của chúng tôi cũng vậy

Chúng tôi chỉ cần di chuyển những thay đổi mà chúng tôi đã thực hiện

Thực hiện hai câu lệnh trong thiết bị đầu cuối. -

python manage.py makemigrations

python manage.py migrate

Chạy máy chủ và kiểm tra giới hạn kích thước tệp tải lên

Cuối cùng, hãy chạy máy chủ của bạn bằng cách sử dụng python manage.py runserver

Bạn sẽ nhận được một liên kết hoặc bạn có thể điều hướng trực tiếp đến //127.0.0.1:8000/admin

Cố gắng tải lên một tệp hơn 10Mb. Bạn sẽ nhận được lỗi hiển thị màn hình như-

Cảm ơn đã đọc hướng dẫn này. Hy vọng bạn thích hướng dẫn này. Hãy bình luận và chia sẻ đánh giá của bạn

Làm cách nào để kiểm tra kích thước tệp đã tải lên ở Django?

Trình xác thực. py để kiểm tra kích thước của tệp . Bạn cũng có thể thay đổi nó bằng cách chuyển đổi megabyte thành byte.

Kích thước của đối tượng tệp Django là bao nhiêu?

Giá trị mặc định là 64*2 10 byte , .

Làm cách nào để lấy kích thước hình ảnh trong Django?

Bạn có thể lấy cái này với. thuộc tính size [Django-doc] của FieldFile được lưu trữ trong FileField . Kết quả của Lưu trữ cơ bản. kích thước[] phương pháp.

Làm cách nào để đặt giới hạn kích thước tệp trong Django?

Tạo một tệp có tên formatChecker. py bên trong ứng dụng nơi bạn có mô hình có FileField mà bạn muốn chấp nhận một loại tệp nhất định. Sau đó, thay vì sử dụng 'FileField', hãy sử dụng 'ContentTypeRestrictedFileField' này. Bạn có thể thay đổi giá trị của 'max_upload_size' thành giới hạn kích thước tệp mà bạn muốn

Chủ Đề