Cómo usar Cloud Storage

Puedes usar Cloud Storage para almacenar y entregar archivos como películas, imágenes o también otros contenidos estáticos.

En este documento, se describe cómo utilizar la biblioteca cliente de Google Cloud en tu app para almacenar y recuperar datos de Cloud Storage.

Antes de comenzar

  • Sigue las instrucciones que aparecen en “Hello, World!” para Python en App Engine para configurar tu entorno y proyecto, y entender cómo se estructuran las apps de Python en App Engine. Anota y guarda el ID del proyecto, ya que lo necesitarás para ejecutar la aplicación de muestra que se describe en este documento.

  • Asegúrate de crear un depósito de Cloud Storage para tu aplicación con este comando:

    gsutil mb gs://[YOUR_BUCKET_NAME]
    
  • Haz que el depósito pueda leerse públicamente para que pueda entregar archivos:

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

Descarga la muestra

Para clonar el repositorio:

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

Instala las dependencias y edita la configuración del proyecto

En app.yaml, configura GOOGLE_STORAGE_BUCKET; este valor es el nombre del depósito de Cloud Storage que creaste previamente.

env_variables:
    CLOUD_STORAGE_BUCKET: your-bucket-name

En requirements.txt, ten en cuenta que debes incluir la biblioteca google-cloud-storage, ya que proporciona funciones de Cloud Storage.

Flask==1.0.2
google-cloud-storage==1.13.2
gunicorn==19.9.0

Código de la aplicación

La misma aplicación presenta una página web en la que se pide al usuario que proporcione un archivo para almacenar en Cloud Storage. Cuando el usuario selecciona un archivo y hace clic en Enviar, el controlador de carga sube el contenido del archivo a un BLOB de Cloud Storage y lo escribe en el depósito de Cloud Storage.

Recuerda que después de subir el archivo a Cloud Storage, se muestra la URL pública del archivo y podrás usarla para entregar el archivo directamente desde Cloud Storage. Deberías guardar este valor en la aplicación para usarlo más adelante.

import logging
import os

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():
    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():
    """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
    )

    # 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):
    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)

Para obtener más información

Para obtener más información sobre Cloud Storage, consulta la documentación sobre Cloud Storage.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación del entorno de App Engine Flexible para Python