Utiliser Cloud Storage

Vous pouvez utiliser Cloud Storage pour stocker et diffuser des fichiers, tels que des films, des images ou d'autres contenus statiques.

Ce document explique comment utiliser la bibliothèque cliente Google Cloud dans votre application afin de stocker et de récupérer des données dans Cloud Storage.

Avant de commencer

  • Suivez les instructions de la section "Hello, World!" pour Python sur App Engine pour configurer votre environnement et votre projet et comprendre la structure des applications Python dans App Engine. Notez et enregistrez l'ID de votre projet. Vous en aurez besoin pour exécuter l'exemple d'application décrit dans ce document.

  • Veillez à créer un bucket Cloud Storage pour votre application en appelant la commande suivante :

    gsutil mb gs://[YOUR_BUCKET_NAME]
    
  • Rendez le bucket lisible publiquement afin qu'il puisse diffuser des fichiers :

    gsutil defacl set public-read gs://[YOUR_BUCKET_NAME]
    

Télécharger l'exemple

Pour cloner le dépôt, exécutez :

git clone https://github.com/GoogleCloudPlatform/python-docs-samples
cd python-docs-samples/appengine/flexible/storage

Modifier la configuration du projet et installer les dépendances

Dans app.yaml, définissez GOOGLE_STORAGE_BUCKET. Cette valeur correspond au nom du bucket Cloud Storage que vous avez créé précédemment.

env_variables:
    CLOUD_STORAGE_BUCKET: your-bucket-name

Notez que la bibliothèque google-cloud-storage doit être incluse dans le fichier requirements.txt, car elle fournit certaines fonctions Cloud Storage.

Flask==2.1.0; python_version > '3.6'
Flask==2.0.3; python_version < '3.7'
werkzeug==2.1.2; python_version > '3.6'
werkzeug==2.0.3; python_version < '3.7'
google-cloud-storage==2.0.0; python_version < '3.7'
google-cloud-storage==2.1.0; python_version > '3.6'
gunicorn==20.1.0; python_version > '3.0'
gunicorn==19.10.0; python_version < '3.0'

Code de l'application

L'exemple d'application présente une page Web invitant l'utilisateur à sélectionner un fichier à stocker dans Cloud Storage. Lorsque l'utilisateur sélectionne un fichier et clique sur "Envoyer", le gestionnaire d'importation charge le contenu du fichier dans un blob Cloud Storage et écrit le fichier dans le bucket Cloud Storage.

Notez qu'après l'importation du fichier dans Cloud Storage, l'URL publique de ce fichier vous est renvoyée. Vous pouvez l'utiliser pour diffuser le fichier directement à partir de Cloud Storage. Vous devez stocker cette valeur dans votre application pour une utilisation ultérieure.

import logging
import os
from typing import Union

from flask import Flask, request
from google.cloud import storage

app = Flask(__name__)

# Configure this environment variable via app.yaml
CLOUD_STORAGE_BUCKET = os.environ['CLOUD_STORAGE_BUCKET']

@app.route('/')
def index() -> str:
    return """
<form method="POST" action="/upload" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit">
</form>
"""

@app.route('/upload', methods=['POST'])
def upload() -> str:
    """Process the uploaded file and upload it to Google Cloud Storage."""
    uploaded_file = request.files.get('file')

    if not uploaded_file:
        return 'No file uploaded.', 400

    # Create a Cloud Storage client.
    gcs = storage.Client()

    # Get the bucket that the file will be uploaded to.
    bucket = gcs.get_bucket(CLOUD_STORAGE_BUCKET)

    # Create a new blob and upload the file's content.
    blob = bucket.blob(uploaded_file.filename)

    blob.upload_from_string(
        uploaded_file.read(),
        content_type=uploaded_file.content_type
    )

    # Make the blob public. This is not necessary if the
    # entire bucket is public.
    # See https://cloud.google.com/storage/docs/access-control/making-data-public.
    blob.make_public()

    # The public URL can be used to directly access the uploaded file via HTTP.
    return blob.public_url

@app.errorhandler(500)
def server_error(e: Union[Exception, int]) -> str:
    logging.exception('An error occurred during a request.')
    return """
    An internal error occurred: <pre>{}</pre>
    See logs for full stacktrace.
    """.format(e), 500

if __name__ == '__main__':
    # This is used when running locally. Gunicorn is used to run the
    # application on Google App Engine. See entrypoint in app.yaml.
    app.run(host='127.0.0.1', port=8080, debug=True)

Pour en savoir plus

Pour obtenir des informations complètes sur Cloud Storage, consultez la documentation Cloud Storage.