我正在尝试使用django_mongodb_engine在mongodb集合中保存文件这么简单,但我遇到了很多困难。
到目前为止,我只能通过将文件保存到数据库之前将文件转换为base64,然后在检索它时从base64解码它来使其工作。我不希望这样做,因为来回转换为base64可能会占用比此操作实际占用更多的资源,尽管我可能错了。
那么有人能告诉我使用django_mongodb_engine从MongoDB保存和检索二进制数据的正确方法吗?
到目前为止代码:
models.py
from django.db import models
from djangotoolbox.fields import *
class TestModel(models.Model):
name = models.CharField(max_length=50)
zip_file = BlobField()
views.py
from django.shortcuts import render
from django.http import HttpResponse
from my_project.models import *
def index(request):
f = open('myfile.zip')
contents = f.read()
f.close()
record = TestModel.objects.create(
name = "My File",
zip_file = contents
)
result = TestModel.objects.filter(name = "My File")
zip_contents = result[0].zip_file
response = HttpResponse(zip_contents, content_type='application/zip')
response['Content-Disposition'] = 'attachment; filename="My_File.zip"'
return response
哦,请不要告诉我使用GridFS,因为我将存储的文件将低于16MB,大约2.5MB - 最多3.5MB。
答案 0 :(得分:0)
正如NeilLunn指出的那样,django_mongodb_engine不支持二进制数据字段,最好完全使用mongoengine的ORM。
我的工作代码:
models.py
from mongoengine import *
class TestModel(Document):
name = StringField(max_length=50)
zip_file = BinaryField()
views.py
from django.http import HttpResponse
from my_project.models import *
def index(request):
f = open('myfile.zip')
contents = f.read()
f.close()
record = TestModel(name = 'My File', zip_file = contents)
record.save()
result = SkinDetails.objects(name='Metro Skin')
zip_contents = result[0].zip_file
response = HttpResponse(zip_contents, content_type='application/zip')
response['Content-Disposition'] = 'attachment; filename="My_File.zip"'
return response