Сведения о вопросе

CPdeveloper

13:31, 5th August, 2020

Теги

Когда файл-это просто файл?

Просмотров: 391   Ответов: 4

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

Мой вопрос заключается в следующем: должна ли быть другая таблица для каждого "type" файла? Кроме того, следует ли хранить файлы в контекстно-зависимых местах на сервере или все вместе?

Несколько примеров: фотографии профиля пользователя, работа приложений CVs, документов на страницах CMS и т. д.



  Сведения об ответе

baggs

06:46, 25th August, 2020

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

  • CVs, фотографии связаны с пользователем.
  • вложения связаны со страницей CMS.

Если вы помещаете их в одну таблицу (и вы хотите разрешить пользователям иметь более одной фотографии или резюме), вам нужно две таблицы ссылок для связывания файлов->пользователи и файлы->cms_pages. Возможно, это подразумевает отношение HABTM, которое не является правильным и допускает несогласованные данные.

Подход с двумя таблицами немного чище и позволяет связывать файлы только с правильным типом сущности с простой связью belongsTo.

Но я не думаю, что есть какой-либо "right" ответ на этот вопрос, если вам не нужно хранить разные типы метаданных для разных типов файлов.

Также не забудьте сохранить или вычислить тип mimetype для каждого файла, чтобы он мог быть правильно передан обратно в браузер с правильными заголовками HTTP.


  Сведения об ответе

VERSUION

10:48, 20th August, 2020

Из того, что вы сказали, я бы просто хранил файлы со случайными (UUID или что-то еще) именами файлов в одном месте. Тогда у меня будет таблица 'attachments' или что-то, что содержит ссылки на все ваши внешние файлы. Эта таблица также будет содержать метаданные для этого файла, поэтому какой тип файла это (изображение, CV и т. д.) И так далее.

Там могут быть жесткие ограничения на количество файлов в одном каталоге, хотя, в зависимости от того, что FS вы используете.


  Сведения об ответе

pumpa

17:40, 29th August, 2020

Для хранения разных файлов в разных местах могут быть разные причины.

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

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

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

Существует также проблема конфликтов имен файлов, но если вы переименуете все, чтобы соответствовать полю идентификатора базы данных (например), то это не будет проблемой.

Но в конце концов это, вероятно, зависит от объемов и ваших собственных предпочтений.


  Сведения об ответе

прога

20:25, 6th August, 2020

Отдельная таблица для каждого типа файла становится актуальной только в том случае, если вы храните другие метаданные (и, следовательно, дополнительные столбцы) для каждого типа файла. Если ваши таблицы для каждого типа файлов содержат только одни и те же столбцы (например, filename, filetype, dateuploaded и т. д.), Тогда имеет смысл иметь их все в одной таблице.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться