Non hai necessariamente bisogno di GridFS per archiviare i file in MongoDB, ma sicuramente lo rende un'esperienza più piacevole, perché gestisce la divisione e il salvataggio dei dati binari, rendendo disponibili anche i metadati. Puoi quindi memorizzare un ID nel tuo User
documento nell'immagine dell'avatar.
A parte questo, puoi anche archiviare dati binari direttamente nei tuoi documenti, anche se nel tuo codice non stai salvando i dati. Lo stai semplicemente aprendo con PIL.Image
, ma poi non fare nulla con esso.
Supponendo che tu stia usando pymongo
per il tuo driver, penso che quello che puoi fare sia semplicemente racchiudere i dati binari in un Binary
contenitore, quindi conservarlo. Questo non è stato testato da me, ma presumo che dovrebbe funzionare:
from pymongo.binary import Binary
binary_avatar = Binary(avat)
user={
...
"avatar":avatar,
"avatar_file": binary_avatar
...
}
Detto questo, semplificati e usa GridFS. Ecco a cosa serve.
Se dovessi usare GridFS, potrebbe apparire così:
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
...
}