sql >> Base de Datos >  >> NoSQL >> MongoDB

guardar imagen en mongodb

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