Не е задължително да имате нужда от GridFS за съхраняване на файлове в MongoDB, но със сигурност го прави по-приятно изживяване, защото се справя с разделянето и записването на двоичните данни, като същевременно прави достъпни и метаданните. След това можете да съхраните идентификатор във вашия User
документ към снимката на аватара.
Освен това, можете също да съхранявате двоични данни директно във вашите документи, въпреки че в кода си не запазвате данните. Просто го отваряте с PIL.Image
, но след това не прави нищо с него.
Ако приемем, че използвате pymongo
за вашия драйвер, мисля, че това, което можете да направите, е просто да обвиете двоичните данни в Binary
контейнер и след това го съхранявайте. Това не е тествано от мен, но предполагам, че трябва да работи:
from pymongo.binary import Binary
binary_avatar = Binary(avat)
user={
...
"avatar":avatar,
"avatar_file": binary_avatar
...
}
Това се казва... просто улеснете себе си и използвайте GridFS. За това е предназначен.
Ако трябваше да използвате GridFS, може да изглежда така:
from gridfs import GridFS
avat_ctype = self.request.files['avatar'][0]["content_type"]
fs = GridFS(db)
avatar_id = fs.put(avat, content_type=avat_ctype, filename=nomfich)
user={
...
"avatar_name":avatar,
"avatar_id": avatar_id
...
}