je suis essayé de faire cela en utilisant Tornado et Pil et MongoDB.
user={ "pseudo": pseudo, "password":password, "email":email, "tel":tel, "commune":commune, "statut":statut, "nom":nom, "prenom":prenom, "daten":daten, "sexe":sexe, "avatar":avatar } self.db.essog.insert(user)
4 Réponses :
Vous devez enregistrer des données binaires à l'aide du type de données binaire () de PymonGo. P>
http: //api.mongodb. Org / Python / 2.0 / API / BSON / BINARY.HTML # Module-BSON.Binary P>
Vous n'avez pas nécessairement besoin de gridfs pour stocker des fichiers à MongoDB, mais cela en fait sûrement une expérience plus agréable, car elle gère le fractionnement et la sauvegarde des données binaires, tout en faisant également des métadonnées disponibles. Vous pouvez ensuite stocker un identifiant dans votre document code> code> à l'image Avatar.
Donnez de côté, vous pouvez également stocker des données binaires directement dans vos documents, mais dans votre code, vous ne sauvegardez pas les données. Vous l'ouvrez simplement avec supposant que vous utilisez Pil.Image code>, mais alors ne faisez rien avec elle. P>
pymist code> pour votre chauffeur, je pense que Vous pouvez faire, c'est simplement envelopper les données binaires dans un
binaire code> conteneur a>, puis stockez-le. Ceci n'est pas testé par moi, mais je suppose que cela devrait fonctionner: p>
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
...
}
Wow! C'est ce que je cherche! Étant donné que le profil utilisera le document simple, mais les téléchargements d'utilisateurs utiliseront des gridfs et je vais ajouter la clé de «rejoindre» entre eux. Merci encore et à récupérer des données, je suppose que je vais utiliser la variable binaire_avatar! Je vous remercie!
Oui pour récupérer à nouveau, vous venez de faire un "get" avec cet identifiant qui sera stocké dans le profil utilisateur comme "avatar_id"
Bonjour, j'ai essayé le code et cela a fonctionné, ne sais pas si c'est une faute de frappe, mais c'est de bson.binaire et non pympo.binary et le get, travaillera pour les gridfs et binaires?
Pymongo utilise BSON, donc le module BSON de chaque sens. Et non, il serait complètement différent si vous avez utilisé l'approche binaire et la mettrez directement dans l'utilisateur Doc. Ce serait juste un blob binaire dans le doc. Il n'y a pas d'identifiant spécifique pour cela. Les gridfs vous donneront un identifiant pour cela comme une référence à utiliser dans votre utilisateur Doc.
Donc, d'après ce que je comprends, PIL est uniquement pour le contrôle ou le redimensionnement des images, et ce n'est pas Hime qui enregistrera la base de données, donc si je fais une vignette, où sauvegarder l'image? Ou est-ce que je l'enregistre directement à l'aide de gridfs, car je suis sangtité une différence entre le chemin de fichier de fichiersSystem et le chemin de la base de données.
et la dernière question (désolé de déranger): lorsque je vais le montrer dans le fichier HTML, comment puis-je appeler ce fichier? Gérer son propre système de fichiers
Vous avez besoin de PIL pour faire des conversions, telles que faire de vos vignettes. Ces nouvelles vignettes devraient également être stockées dans les gridfs. Pour l'un de mes sites, je stocke l'image principale, puis ajoutez cet identifiant comme une pièce d'identité parent dans les métadonnées de gridfs des vignettes. Il n'y a pas de fichier FilePath car vous utilisez un mécanisme de stockage différent. Pour les servir, vous pouvez faire une vue simple qui sert l'image d'un identifiant. Pour la production, j'utilise le plugin gridfs pour NGinx, pour les avoir servi directement. Ensuite, cela ne passe pas par Django. La vue Django est juste pour Dev.
Maintenant, je reçois le code plus clair! Je vais essayer de convertir ce que vous avez dit au code, car je ne suis pas bon dessus: D Merci encore :)
Ceci est le code pour insérer et récupérer l'image dans MongoDB sans utiliser de gridfs.
def insert_image(request): with open(request.GET["image_name"], "rb") as image_file: encoded_string = base64.b64encode(image_file.read()) print encoded_string abc=db.database_name.insert({"image":encoded_string}) return HttpResponse("inserted") def retrieve_image(request): data = db.database_name.find() data1 = json.loads(dumps(data)) img = data1[0] img1 = img['image'] decode=img1.decode() img_tag = '<img alt="sample" src="data:image/png;base64,{0}">'.format(decode) return HttpResponse(img_tag)
Dans cet exemple, est request.get ["image_name"] code> une chaîne contenant le chemin d'accès à un fichier sur le système de fichiers? Si oui, qu'en est-il de l'étape de téléchargement de l'image? J'aimerais avoir un mécanisme de téléchargement qui insère directement dans MongoDB, manipulant le téléchargement en mémoire et n'écrire jamais un fichier sur le disque.
Ok, je l'ai compris; Mais aussi y a-t-il une raison pour laquelle vous décharges code> et
charges code> les données puis la décodent à nouveau? Je trouve que je peux simplement utiliser
data = db.collection.find (); imgdata = données [0] ['image']; imgtype = Data [0] ['Type']; Code> (J'ai enregistré le contenu_type), puis renvoyez
httpreesponse ('
". Format (imgtype, imgdata code> et pas besoin de décoder à nouveau. Juste curieux s'il y a une raison pour les décharges / charges / décodes dans le
retrieve_image code> fn
Il y a une erreur dans: la syntaxe correcte est la suivante: p> Thk vous tous pour votre support sans fin P > luca p> p>
Je ne peux pas tout à fait suivre ce que vous essayez de faire.
Avatar CODE> ressemble à un chemin de chemin de fichier que je ne vois pas utilisé pour enregistrer l'image téléchargée et je ne vois pas que vous essayez d'enregistrer les octets d'image dans le cadre d'un utilisateur code > Document non plus.
Formatez votre code source correctement
@Johnnyhk Désolé, parce que j'ai téléchargé seulement le fragment du code désolé pour le retard que la réponse ci-dessous m'a donné l'explication: D Merci :)