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

Сохранение содержимого файла в БД

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

4b9b3361

Ответ 1

это очень легко

просто переопределить метод сохранения в admin

filecontent=form.cleaned_data.get('upload_file')  
data =filecontent.read()
from django.db import connection
cursor = connection.cursor()
cursor.execute("update filecontent set filecontent=(%s) where id=(%s)",[data,obj.id])
connection.connection.commit()
cursor.close()
connection.close()

это будет хранить filecontent в файле db columncontent файла filecontent

Ответ 2

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

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

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

Ответ 3

Я знаю, что это старый вопрос, но с тех пор был хороший код, чтобы разрешить этот вариант. Специально см. django-database-files, в котором будет использоваться API хранения Django, чтобы все файлы FileFields и ImageFields сохраняли их содержимое в базе данных. Также существует вилка для кэширования файлов локально в файловой системе, чтобы преодолеть самую большую проблему использования базы данных, которая является задержкой.

Ответ 4

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