Как мне хранить файлы в NodeJS - PullRequest
0 голосов
/ 31 января 2019
  • Я новичок в Nodejs и изучаю, как загрузить файл с помощью Multer в NodeJS.И я увидел, что большая часть учебника хранит все виды файлов (аудио, фото аватаров, фото баннеров, текст, PDF, ...) только в статической «публичной» папке.
  • Мой первый вопрос:Это лучший способ сохранить файл в бэкэнде?Должен ли я создать подпапку для конкретного пользователя, чтобы хранить все файлы этого пользователя (например, User1Folder, User2Folder) или для типа файлов (например: PDFFolder, AvatarFolder, ..).
  • Мой второй вопрос: долженЯ создаю модель файла следующим образом: File {id: "", name: "", uploadedDate: "", ...} и сохраняю ее в базе данных.

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Обычно компании выбирают сторонние или отдельные службы хранения, оптимизированные для хранения файлов.Некоторые поставляются с планом бесплатной пробной версии, таким как aws-s3, gcs от Google, Azure и другие.

Но если это действительно касается хранения файлов в нашем собственном сервисе, то достаточно поставить всефайлы в одной и той же папке (каталог плоских файлов) и выполните классификацию файлов, прикрепив файл к соответствующим моделям.Поместив что-то вроде этого в данные: { "username": "arege", "name": "Arle Greg", "profile_picture_file":"timestamp_somehash.png"}

Что касается второго вопроса, если вашей службе требуется записывать даты для всех загруженных типов файлов в целом, то хорошо иметь такую ​​модель.Но если это только для небольшой части типов файлов в сервисе, его можно записать в соответствующей модели вместе со ссылкой на файл.

0 голосов
/ 31 января 2019
  • Статическая общая папка должна быть вашей единственной открытой папкой, так что в некотором смысле вы все правильно поняли.
  • Нет, я бы использовал внешний сервис, такой как AWS S3, для хранения пользовательских ресурсов.Шаблон папки, который вы выбираете, полностью зависит от того, какие ресурсы вы планируете хранить для своих пользователей.Какой способ облегчает отладку, поддерживает работоспособность и позволяет переходить на другие серверы.Можете ли вы разделить пользователей между серверами?Я бы нарисовал дерево ожидаемых типов файлов и подумал, какой шаблон наиболее гибкий в вашем приложении.Я бы склонялся к типам, поскольку некоторые файлы обрабатываются не так, как другие.Вам также не нужны сотни почти пустых папок от неактивных пользователей.
  • Да.Также укажите путь к файлу на сервере для повторного использования позже.Я бы также подумал о соглашениях по именованию файлов в качестве идентификатора резервной копии.Может быть что-то вроде userid_date_avatar.jpg.

{ id: 12345, path: "s3://app_name/users/assets/images/5543_01_31_2019_10_05_33_avatar.jpg", uploaded: "01-31-2019_10:05:33" }

...