Cloud Storage verwenden

Sie können Cloud Storage zum Speichern und Bereitstellen von Dateien wie Filmen oder Bildern oder anderen statischen Inhalten verwenden.

In diesem Dokument wird beschrieben, wie Sie mit der Google Cloud-Clientbibliothek in Ihrer App Daten in Cloud Storage speichern und abrufen können.

Hinweis

  • Folgen Sie der Anleitung unter "Hello, World!" für Python in App Engine, um Ihre Umgebung und Ihr Projekt einzurichten und mehr über die Strukturierung von Python-Anwendungen in App Engine zu erfahren. Notieren Sie sich Ihre Projekt-ID und bewahren Sie sie auf. Sie benötigen diese ID, um die in diesem Dokument beschriebene Beispielanwendung auszuführen.

  • Vergessen Sie nicht, einen Cloud Storage-Bucket für Ihre Anwendung zu erstellen. Rufen Sie dazu den folgenden Befehl auf:

    gsutil mb gs://[YOUR_BUCKET_NAME]
    
  • Machen Sie den Bucket öffentlich lesbar, damit er zum Bereitstellen von Dateien genutzt werden kann:

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

Beispiel herunterladen

So klonen Sie das Repository:

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

Projektkonfiguration bearbeiten und Abhängigkeiten installieren

Legen Sie in app.yaml GOOGLE_STORAGE_BUCKET fest. Dieser Wert ist der Name des Cloud Storage-Buckets, den Sie zuvor erstellt haben.

env_variables:
    CLOUD_STORAGE_BUCKET: your-bucket-name

Beachten Sie in requirements.txt, dass Sie hier die Bibliothek google-cloud-storage einschließen müssen, da hierdurch Cloud Storage-Funktionen bereitgestellt werden.

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'

Anwendungscode

Die Beispielanwendung zeigt eine Webseite an, die den Nutzer zur Angabe einer Datei auffordert, die in Cloud Storage gespeichert werden soll. Wenn der Nutzer eine Datei auswählt und auf "Senden" klickt, lädt der Upload-Handler den Dateiinhalt in ein Cloud Storage-Blob und schreibt ihn in den Cloud Storage-Bucket.

Beachten Sie, dass nach dem Hochladen der Datei in Cloud Storage die öffentliche URL zu dieser Datei zurückgegeben wird, mit der Sie die Datei dann direkt aus Cloud Storage bereitstellen können. Sie sollten diesen Wert für die zukünftige Verwendung in Ihrer Anwendung speichern.

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)

Weitere Informationen

Sie erhalten umfassende Informationen zu Cloud Storage in der Cloud Storage-Dokumentation.