web-dev-qa-db-fra.com

Téléchargement d'un fichier à partir du stockage Google Cloud dans un dossier

J'ai un script python qui obtient une liste de fichiers qui ont été téléchargés dans un compartiment de stockage Google Cloud et tente de récupérer les données sous forme de chaîne.

Le code est simplement:

file = open(base_dir + "/" + path, 'wb')
data =  Blob(path, bucket).download_as_string()
file.write(data)

Mon problème est que les données que j'ai téléchargées sont stockées dans des dossiers dans le compartiment, donc le chemin d'accès serait quelque chose comme:

folder/innerfolder/file.jpg

Lorsque la bibliothèque Google tente de télécharger le fichier, elle l'obtient sous la forme d'une demande GET, qui transforme le chemin ci-dessus en:

https://www.googleapis.com/storage/v1/b/bucket/o/folder%2Finnerfolder%2Ffile.jpg

Existe-t-il un moyen d'arrêter cela/de télécharger le fichier de cette façon? À votre santé.

12
pyy

Oui - vous pouvez le faire avec le python bibliothèque cliente de stockage .

Installez-le simplement avec pip install --upgrade google-cloud-storage, Puis utilisez le code suivant:

from google.cloud import storage

# Initialise a client
storage_client = storage.Client("[Your project name here]")
# Create a bucket object for our bucket
bucket = storage_client.get_bucket(bucket_name)
# Create a blob object from the filepath
blob = bucket.blob("folder_one/foldertwo/filename.extension")
# Download the file to a destination
blob.download_to_filename(destination_file_name)

Vous pouvez également utiliser .download_as_string() mais lorsque vous l'écrivez dans un fichier, le téléchargement direct dans le fichier peut être plus facile.

La seule chose légèrement gênante à savoir est que le chemin de fichier est le chemin à partir de après le nom du compartiment, donc ne correspond pas exactement au chemin sur l'interface Web.

14
GregT