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

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

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

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

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

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

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

27
задан Edan Maor 27 April 2010 в 12:04
поделиться

2 ответа

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

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

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

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

3
ответ дан 28 November 2019 в 05:56
поделиться

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

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

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

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

2
ответ дан 28 November 2019 в 05:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: