Лучший способ хранить загруженные пользователем файлы в веб-приложении - PullRequest
26 голосов
/ 27 апреля 2010

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

Из связанных вопросов я видел, что некоторые люди предлагали дать файлу сгенерированный сервером unqiue id, а затем создать таблицу БД, которая сопоставляет идентификаторы с исходными именами файлов.

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

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

Редактировать : Немного больше информации о том, что мне нужно. Я говорю конкретно о файлах изображений, которые пользователи должны загружать и встраивать в создаваемый ими контент. Представьте себе, что это ответ StackOverflow (или сообщение в блоге): кто-то загружает изображение, которое должно храниться и отображаться всякий раз, когда кто-либо еще видит ответ.

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

Ответы [ 2 ]

3 голосов
/ 27 апреля 2010

Ваш вопрос слишком широк, чтобы действительно быть полезным; Лучший подход будет зависеть от ваших конкретных требований. Тем не менее ...

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

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

Что касается изображений, есть некоторая нетривиальная работа по изменению масштаба до различных размеров / миниатюр.

2 голосов
/ 27 апреля 2010

Это большой вопрос.

Относительно вашего варианта использования изображения, это домен сервера изображения, который обычно является отдельной частью приложения. Они управляют жизненным циклом и изменением размеров изображений (одно изображение сохраняется / изменяется до разных размеров). Насколько я видел, такое никогда не реализовывалось с помощью BLOB-столбца из SQL, а простым обычным файлом на диске.

Также взгляните на ( пример инфраструктуры с Facebook )

Как правило, продукт должен соответствовать вашим конкретным требованиям (размер файла, количество файлов, загрузка). В большинстве случаев вы действительно не хотите создавать все эти вещи с нуля ... Хотя, если ваши требования более низкого уровня (всего несколько пользователей загружают файлы редко), вы можете просто сохранить эти файлы на диске и сохранить путь в качестве ссылки в другие ваши данные (например, столбец в РСУБД).

...