No necesariamente necesita GridFS para almacenar archivos en MongoDB, pero seguramente lo convierte en una experiencia más agradable, porque maneja la división y el guardado de los datos binarios, al tiempo que hace que los metadatos también estén disponibles. Luego puede almacenar una ID en su User
documento a la imagen del avatar.
Aparte de eso, también podría almacenar datos binarios directamente en sus documentos, aunque en su código no está guardando los datos. Simplemente lo está abriendo con PIL.Image
, pero luego no hacer nada con él.
Asumiendo que estás usando pymongo
para su controlador, creo que lo que puede hacer es simplemente envolver los datos binarios en un Binary
contenedor y luego guárdelo. Esto no lo he probado, pero supongo que debería funcionar:
from pymongo.binary import Binary
binary_avatar = Binary(avat)
user={
...
"avatar":avatar,
"avatar_file": binary_avatar
...
}
Ahora que se ha dicho eso... solo haz que sea más fácil para ti y usa GridFS. Para eso está destinado.
Si tuviera que usar GridFS, podría verse así:
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
...
}