2017-06-16 1 views
0

Lorsque vous utilisez le pilote PyMongo pour MongoDB, je suis en mesure de télécharger des images à l'aide GridFS avec succès bucket.upload_from_stream (nom, adresse). C'est très simple et n'a pas de complications. Mais lorsque je tente de récupérer ces mêmes données en utilisant bucket.download_to_stream_by_name (nom, adresse), avec le deuxième paramètre comme destination, il jette une erreur: AttributeError: « unicode » objet n'a pas d'attribut « écriture »MongoDB GridFS Python Télécharger ne fonctionne pas

Pourquoi Est-ce que cela arrive? Comment définir l'emplacement où je veux enregistrer mes fichiers?

+0

@Rawing Je l'ai lu la documentation plusieurs fois, mais il n'y a absolument aucune précision sur ce qui devrait être l'objet de type fichier. L'objet de type fichier, comme il semble être dans l'exemple de la documentation, ne fournit aucune possibilité de spécifier l'emplacement de stockage, même si le paramètre est appelé « destination ». –

Répondre

0

Voici un exemple d'utilisation download_to_stream_by_name et la création d'un fichier dans un répertoire sur votre disque:

import os 
from pymongo import MongoClient 
from gridfs import GridFSBucket 

my_db = MongoClient().test 
fs = GridFSBucket(my_db) 
file_id = fs.upload_from_stream(
    "test_file", 
    "data I want to store!", 
    chunk_size_bytes=4, 
    metadata={"contentType": "text/plain"}) 

fs = GridFSBucket(my_db) 
# Get file to write to 
if not os.path.exists('my_directory'): 
    os.makedirs('my_directory') 

file = open('my_directory/myfile','wb') 
fs.download_to_stream_by_name("test_file", file) 

Un « objet comme fichier » est celui qui a une méthode « écrire » qui prend des morceaux de caractères écrire. Un objet fichier créé par la fonction "open" est une possibilité d'un objet semblable à un fichier.

Notez le nom du fichier transmis à download_to_stream_by_name est le nom de fichier dans GridFS, pas un nom de fichier sur votre disque.

+0

Merci pour votre réponse @A. Jesse Davis Jirya, mais ma question ne télécharge pas exactement, mais en spécifiant le répertoire de téléchargement. Je peux spécifier le répertoire de téléchargement dans Node.js, mais je suis incapable de le configurer dans ceci. –

+0

J'ai mis à jour ma réponse pour montrer comment créer un répertoire. –