Класс FileSystemStorage
Класс FileSystemStorage реализует базовое хранилище для работы с файлами в файловой системе. Он наследуется от класса Storage и предоставляет методы для сохранения, открытия, удаления, проверки существования и получения информации о файлах. При инициализации можно указать корневую директорию, базовый URL и параметры создания файлов.
Синтаксис
from django.core.files.storage import FileSystemStorage
storage = FileSystemStorage(
location=None,
base_url=None,
file_permissions_mode=None,
directory_permissions_mode=None
)
Параметры класса:
# location - путь к корневой директории (по умолчанию MEDIA_ROOT)
# base_url - базовый URL для доступа к файлам (по умолчанию MEDIA_URL)
# file_permissions_mode - права доступа для создаваемых файлов (по умолчанию None)
# directory_permissions_mode - права доступа для создаваемых директорий (по умолчанию None)
Пример
Создадим экземпляр хранилища с указанием пользовательской директории и сохраним файл:
from django.core.files.storage import FileSystemStorage
from django.core.files.base import ContentFile
# Создаем хранилище для папки 'uploads'
fs = FileSystemStorage(location='uploads')
# Сохраняем файл с содержимым
file_content = ContentFile(b'Hello, World!')
saved_name = fs.save('hello.txt', file_content)
print(saved_name)
Результат выполнения кода:
"hello.txt"
Пример
Откроем сохраненный файл и прочитаем его содержимое:
from django.core.files.storage import FileSystemStorage
fs = FileSystemStorage(location='uploads')
# Открываем файл для чтения
with fs.open('hello.txt', 'r') as file:
content = file.read()
print(content)
Результат выполнения кода:
"Hello, World!"
Пример
Проверим существование файла и удалим его:
from django.core.files.storage import FileSystemStorage
fs = FileSystemStorage(location='uploads')
# Проверяем существование файла
if fs.exists('hello.txt'):
# Удаляем файл
fs.delete('hello.txt')
print('File deleted successfully')
else:
print('File not found')
Результат выполнения кода:
"File deleted successfully"
Пример
Получим список файлов в директории и информацию о размере:
from django.core.files.storage import FileSystemStorage
fs = FileSystemStorage(location='uploads')
# Получаем список всех файлов
files = fs.listdir('')
print('Files:', files)
# Получаем размер файла
if files[1]:
file_name = files[1][0]
file_size = fs.size(file_name)
print(f'File: {file_name}, Size: {file_size} bytes')
Результат выполнения кода:
"Files: ([], ['hello.txt', 'example.pdf'])"
"File: hello.txt, Size: 13 bytes"
Пример
Сгенерируем URL для доступа к файлу через веб-сервер:
from django.core.files.storage import FileSystemStorage
fs = FileSystemStorage(location='uploads', base_url='/media/')
# Получаем URL для файла
file_url = fs.url('hello.txt')
print(file_url)
Результат выполнения кода:
"/media/hello.txt"