Symfony4 - хорошая практика для хранения загруженных файлов - PullRequest
0 голосов
/ 11 ноября 2018

В разрабатываемом веб-приложении клиент будет загружать множество маленьких картинок (из внутреннего представления), которые будут отображаться в пользовательском интерфейсе.

В настоящее время я храню все изображения здесь:

backgrounds_directory: '%kernel.project_dir%/public/uploads/backgrounds'
decorations_directory: '%kernel.project_dir%/public/uploads/decorations'
templates_directory: '%kernel.project_dir%/public/uploads/templates'

Так что они на самом деле в проекте S4. Когда я создаю версию своего проекта с помощью GIT, эти загрузки не будут синхронизироваться с моей версией dev.

Какая была бы лучшая практика?

  • Хранить их где-нибудь вне проекта S4 и делать critjob коммит GIT каждый час?
  • Сохранить изображение из Symfony, как на сервере Amazon S3, и хранить только идентификатор изображения в моей БД для последующего получения?
  • GIT игнорирует этот репозиторий и регулярно его резервирует?
  • Сохранить base64 изображения в моей БД?

Я не совсем уверен, какую дорожку выбрать. Я думаю, что есть много вариантов. Если у вас есть опыт в этом, я хотел бы взять несколько советов.

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

, поскольку это пользовательские данные, которые, вероятно, также зависят от базы данных, я бы не стал добавлять pcitures в ваш Git-репозиторий разработки. Git-репозиторий должен быть для исходного кода вашего приложения, а не для пользовательских данных.

Где загрузить также зависит от ваших требований. Самый простой способ - это то, как вы делаете это в данный момент, сохраняя файлы локально на веб-сервере, где работает ваше приложение. Это будет проблемой только в том случае, если у вас больше файлов, чем в хранилище, или вы запускаете приложение на нескольких серверах. В таких случаях имеет смысл хранить их на внешнем сервисе, например Amazon S3. Но, конечно, это немного усложнит ситуацию (внешний сервис, затраты, интеграция и т. Д.)

Если вам нужно время от времени синхронизировать среду разработки с рабочей версией, вы можете использовать rsync для копирования новых или измененных файлов в вашу среду. Это, конечно, не заменяет правильную резервную копию, которая должна быть настроена непосредственно на рабочем сервере, а также включать базу данных.

0 голосов
/ 11 ноября 2018

В основном зависит от ваших потребностей и требований формы вашего заявления. Я опишу решение, которое я использую.

Сначала я абстрагирую операции с файловой системой, используя FlySystem , которая позволяет легко переключаться между S3, локальной файловой системой или чем-либо еще (в моей конфигурации я имею в среде dev сопоставленную с локальной файловой системой, а производство обычно с S3) .

Папка для загрузки обязательно должна игнорироваться в git. Git хорош для хранения более текстовой информации, а изображения не так хороши для отслеживания изменений и т. Д.

Вам все еще нужно создать решение для резервного копирования (мы также делаем резервное копирование содержимого S3 в другое ведро) на случай ошибки в приложении / атаке.

Комментарий к решению для базы данных: это может быть путь, но на самом деле зависит от ваших потребностей и вашего выбора базы данных. Но определенно не используйте base64, но обычно в базах данных есть что-то вроде BLOB / Binary, который является гораздо лучшим выбором для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...