Django:将图像存储在数据库中

5

之前我使用默认的sqlite3数据库,但今天我把它改成了postgresql。

我想把图像文件保存在数据库中而不是项目目录本身。我该怎么做?

1个回答

10

把图片存储在数据库而不是media文件夹里并不是一个好主意,但你可以使用BinaryField来实现:

model.py

class MyModel(model.Model):
    image = models.BinaryField(blank=True)

view.py

def image(request):
    image_file = request.FILES['image_file'].file.read()
    MyModel.objects.create(image=image_file)

2
为什么不使用ImageField而是使用BinaryField?使用ImageField有哪些优缺点? - MD. Khairul Basar
3
一个 ImageField 只是存储文件名的文本字段。 - Selcuk
1
由于ImageField将图像存储在MEDIA_ROOT文件夹中,而BinaryField存储在数据库中。TS希望将其用于BD。https://docs.djangoproject.com/en/1.11/ref/models/fields/#django.db.models.FileField.storage - amarynets
谢谢。明白了。:D - MD. Khairul Basar
@Selcuk先生,它不仅仅是存储文件名,它还将整个文件存储在与项目相同的文件夹中。这会减慢进程吗? - user8557845
是的,而且如果那些图片只能通过 Django 而不是像 nginx 这样的 Web 服务器提供服务,你将面临缓存问题。 - Selcuk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接