MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

salvando imagem no mongodb


Você não precisa necessariamente do GridFS para armazenar arquivos no MongoDB, mas certamente torna a experiência mais agradável, porque lida com a divisão e o salvamento dos dados binários, ao mesmo tempo em que disponibiliza os metadados. Você pode então armazenar um ID em seu User documento para a imagem do avatar.

Além disso, você também pode armazenar dados binários diretamente em seus documentos, embora em seu código você não esteja salvando os dados. Você simplesmente está abrindo com PIL.Image , mas depois não fazer nada com ele.

Supondo que você esteja usando pymongo para o seu driver, acho que o que você pode fazer é apenas envolver os dados binários em um Binary recipiente e, em seguida, armazená-lo. Isso não foi testado por mim, mas suponho que deve funcionar:
from pymongo.binary import Binary

binary_avatar = Binary(avat)

user={
    ...
    "avatar":avatar,
    "avatar_file": binary_avatar
    ...
}

Agora que está dito... apenas facilite para você e use o GridFS. É para isso que se destina.

Se você fosse usar o GridFS, ficaria assim:
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
    ...
}