Подтвердить что ты не робот

Лучший способ хранения загруженных пользователем файлов в webapp

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

Также рассмотрите пример из facebook)

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