On my web development journey, one task I come across very often is uploading files(images, videos, etc) and making them accesible by some means to a frontend
The uploaded file will generally be made public using a url that is provided after it has been successfully uploaded and stored
"Why should I always re-implement the same functionality across different backends?" I always asked myself. That's why I came up with a simple solution, why not a cloud function? It will be platform/backend agnostic and it doesn't come with all the hassle of setting up a dedicated backend
I don't know
These are the steps I will follow for a beginning. It may change with time and requirements
- send a post request to the function
- the request should contain the asset/assets to be stored in base64 format
- the request may also contain parameters to indicate in which platform/service the assets should be stored (digital-ocean, cloudinary, S3, firebase, gcloud, etc)
Note: in order for the tests to run properly, you'll have to deploy some of the sample functions:
gcloud functions deploy helloHttp --runtime [YOUR_RUNTIME] --trigger-http
gcloud functions deploy helloPubSub --trigger-topic $FUNCTIONS_TOPIC --runtime [YOUR_RUNTIME]
gcloud functions deploy helloGCS --runtime [YOUR_RUNTIME] --trigger-resource $FUNCTIONS_DELETABLE_BUCKET --trigger-event providers/cloud.storage/eventTypes/object.change
- Replace
[YOUR_RUNTIME]
with the name of the runtime you are using. For a complete list, see the gcloud reference.
-
Read and follow the prerequisites.
-
Install dependencies:
npm install
-
Set the following environment variables:
export GCF_REGION=us-central1 export FUNCTIONS_TOPIC=[YOUR_PUBSUB_TOPIC] export FUNCTIONS_DELETABLE_BUCKET=[YOUR_CLOUD_STORAGE_BUCKET] # will be deleted by tests!
-
Run the tests:
npm test