@9550668

Django back-end + JSON + front-end. Как организовать обмен файлами корректно?

Всем добрый день в очередной раз)

Хочу попросить совета с правильной организацией обмена файлами. А именно: фото (front-end -> обработка на back-end и сохранение, back-end -> frond-end), видео (front-end -> сжатие и обработка на back-end и сохранение, back-end -> front-end). Запросы идут через JSON (использую Постман).

1. На сколько разумно хранить в Django Model объект в виде File/Image field? Может там хранить ссылку на сервере на файл?
2. Как правильно получать/передавать в более разумном варианте информацию? К примеру JSONResponse выдает ссылку на файл или сам файл(на сколько большой обмен запросами из-за этого будет?).
3. И как лучше хранить файлы на сервере? Явно же хранить по ссылке, к примеру, https://xxx.xxx.xxx.xxx/blablabla/media/video/1.avi - не самый корректный вариант)
4. Предположим, есть 10.000 пользователей, у каждого свой аватар. Все аватары хранятся просто в одной папке на сервере? И тоже самое, к примеру с пользовательскими фото и т.д.

Может есть мануалы, внятно написанные? Видео обзоры или что-то еще дополнительное к Вашему профессиональному видению?
  • Вопрос задан
  • 334 просмотра
Решения вопроса 1
tumbler
@tumbler Куратор тега Django
бекенд-разработчик на python
  1. File/ImageField отлично подходят, только стоит учитывать, что они открывают файл на чтение для валидации при каждом сохранении объекта черед админку. И да, они хранят сылку на сервере (точнее относительный путь в какой-то ФС). Storage backend позволяет вместо локального диска использовать что-то более надежное, распределенное и масштабируемое чем локальный диск на единственном сервере.
  2. Для фото еще куда ни шло, но передавать видео в любом виде, отличном от application/octet-stream - это трата ресурсов, как браузера пользователя, так и сервера. Соответственно, в JSONResponse только ссылки.
  3. Хранить файлы на сервере по-другому не получится, не в MongoDB же их пихать. Не очень понятно, что конкретно смущает в приведенной ссылке на 1.avi
  4. В nix-ах есть особенность реализации ФС: любой каталог, в котором 10к+ файлов, размывает кэш дескрипторов ФС, поэтому при хранении БОЛЬШОГО числа файлов их раскладывают по двух-трех-уровневой иерархии каталогов. См. FileField.upload_to для примера, как это можно интегрировать в Django. А так в целом да, желательно чтобы по полному пути файла можно было определить, к какому объекту он относится, без использования БД (чтобы висячие файлы чистить)

Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы