appengine/flexible/storage/main.py (34 lines of code) (raw):

# Copyright 2015 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # [START gae_flex_storage_app] from __future__ import annotations 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() -> 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: 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) # [END gae_flex_storage_app]