Utilizzo di Cloud Storage

Puoi utilizzare Cloud Storage per archiviare e pubblicare file, come filmati o immagini o altri contenuti statici.

Questo documento descrive come utilizzare la libreria client di Google Cloud nell'app per archiviare dati e recuperare dati da Cloud Storage.

Prima di iniziare

  • Segui le istruzioni in "Hello, World!" per Python su App Engine per configurare il tuo ambiente e il tuo progetto e per comprendere come sono strutturate le app Python in App Engine. Annota e salva l'ID progetto, perché è necessario per eseguire l'applicazione di esempio descritta in questo documento.

  • Assicurati di creare un bucket di Cloud Storage per la tua applicazione richiamando il seguente comando:

    gsutil mb gs://[YOUR_BUCKET_NAME]
    
  • Rendi il bucket pubblicamente pubblico in modo che possa gestire file:

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

Scarica l'anteprima

Per clonare il repository:

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

Modifica la configurazione del progetto e installa le dipendenze

In app.yaml, imposta GOOGLE_STORAGE_BUCKET; questo valore è il nome del bucket di Cloud Storage che hai creato in precedenza.

env_variables:
    CLOUD_STORAGE_BUCKET: your-bucket-name

Come spiegato in requirements.txt, devi includere la libreria google-cloud-storage, poiché questo offre funzioni di Cloud Storage.

Flask==2.1.0; python_version > '3.6'
Flask==2.0.3; python_version < '3.7'
werkzeug==2.1.0; 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'

Codice dell'applicazione

L'applicazione di esempio presenta una pagina web che chiede all'utente di fornire un file da archiviare in Cloud Storage. Quando l'utente seleziona un file e fa clic su Invia, il gestore del caricamento carica il contenuto del file in un blob di Cloud Storage e lo scrive nel bucket di Cloud Storage.

Nota che, dopo il caricamento in Cloud Storage, viene restituito l'URL pubblico del file, che puoi utilizzare per pubblicare il file direttamente da Cloud Storage. Conserva questo valore nella tua app per usi futuri.

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)

Per ulteriori informazioni

Per informazioni complete su Cloud Storage, consulta la documentazione di Cloud Storage.