Как получить размер изображения в python в виде мегабайта или килобайта
Я хочу узнать размер изображения в мегабайтах или килобайтах. Подобный вопрос уже задавался раньше, но решения так и не было. NOTE: меня не волнует ширина и высота изображения, только размер файла в мегабайтах или килобайтах, потому что я работаю над изображением для проверки пользовательского ввода, так что это происходит на лету.
Вот мой код:
from PIL import Image
images = request.FILES.getlist('files')
memory_upload = []
for x in range(len(images)):
img = images[x]
#image upload input validator for extension
if img.name.split('.')[1] in accept_ext:
im = Image.open(img)
print(im.size)
Результат для изображений размером в подушку в формате ширины и высоты: (3696, 4620) Но мне нужно знать размер в мегабайтах, чтобы предотвратить сжатие изображения, если файл огромный, чтобы ограничить что-то вроде DoS-атаки на сервер
file = request.FILES['filename']
file.name # Gives name
file.content_type # Gives Content type text/html etc
file.size # Gives file's size in byte
file.read() # Reads file
Вы также можете ограничить лимиты загрузки файлов django. Используя эти настройки.
Ref: https://docs.djangoproject.com/en/4.0/ref/settings/#file-upload-settings
DEFAULT_FILE_STORAGE
FILE_UPLOAD_HANDLERS
FILE_UPLOAD_MAX_MEMORY_SIZE
FILE_UPLOAD_PERMISSIONS
FILE_UPLOAD_TEMP_DIR
MEDIA_ROOT
MEDIA_URL
DATA_UPLOAD_MAX_MEMORY_SIZE¶
Default: 2621440 (i.e. 2.5 MB).
Максимальный размер в байтах, который может иметь тело запроса до возникновения подозрительной операции (RequestDataTooBig). Проверка выполняется при доступе к request.body или request.POST и рассчитывается по общему размеру запроса без учета данных о загрузке файлов. Вы можете установить значение None, чтобы отключить проверку. Приложения, в которых ожидается получение необычно больших постов формы, должны настроить этот параметр.
Объем данных запроса соотносится с объемом памяти, необходимой для обработки запроса и заполнения словарей GET и POST. Большие запросы могут быть использованы в качестве вектора атаки на отказ в обслуживании, если их не проверить. Так как веб-серверы обычно не выполняют глубокую проверку запросов, выполнить подобную проверку на этом уровне невозможно.