MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

enregistrer l'image sur mongodb

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
    ...
}