Vous n'avez pas nécessairement besoin de GridFS pour stocker des fichiers dans MongoDB, mais cela en fait sûrement une expérience plus agréable, car il gère le fractionnement et la sauvegarde des données binaires, tout en rendant les métadonnées également disponibles. Vous pouvez ensuite stocker un ID dans votre User
document à l'image de l'avatar.
Cela mis à part, vous pouvez également stocker des données binaires directement dans vos documents, bien que dans votre code, vous n'enregistriez pas les données. Vous l'ouvrez simplement avec PIL.Image
, mais ensuite ne rien faire avec.
En supposant que vous utilisez pymongo
pour votre pilote, je pense que ce que vous pouvez faire est simplement d'envelopper les données binaires dans un Binary
récipient, puis stockez-le. Ceci n'a pas été testé par moi, mais je suppose que cela devrait fonctionner :
from pymongo.binary import Binary
binary_avatar = Binary(avat)
user={
...
"avatar":avatar,
"avatar_file": binary_avatar
...
}
Maintenant que cela est dit... simplifiez-vous la tâche et utilisez GridFS. C'est à cela qu'il est destiné.
Si vous deviez utiliser GridFS, cela pourrait ressembler à ceci :
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
...
}