MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

salvataggio dell'immagine su mongodb

Non hai necessariamente bisogno di GridFS per archiviare i file in MongoDB, ma sicuramente lo rende un'esperienza più piacevole, perché gestisce la divisione e il salvataggio dei dati binari, rendendo disponibili anche i metadati. Puoi quindi memorizzare un ID nel tuo User documento nell'immagine dell'avatar.

A parte questo, puoi anche archiviare dati binari direttamente nei tuoi documenti, anche se nel tuo codice non stai salvando i dati. Lo stai semplicemente aprendo con PIL.Image , ma poi non fare nulla con esso.

Supponendo che tu stia usando pymongo per il tuo driver, penso che quello che puoi fare sia semplicemente racchiudere i dati binari in un Binary contenitore, quindi conservarlo. Questo non è stato testato da me, ma presumo che dovrebbe funzionare:

from pymongo.binary import Binary

binary_avatar = Binary(avat)

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

Detto questo, semplificati e usa GridFS. Ecco a cosa serve.

Se dovessi usare GridFS, potrebbe apparire così:

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