Simple Golang API File Uploader Using Google Cloud Storage
What on earth is this writting? This tutorial will demonstrate a simple golang API for uploading file to Google Cloud Storage. GCS (Google Cloud Storage) can be used for uploading your image, files, assets, basically any file with the benefits of
Steps:
- Create Google Cloud Storage Bucket
- Create golang API to upload the file
- Conduct testing to upload a file using the API
- Check the uploaded file in the GCP
All steps will be detailed below.
1) Create Google Cloud Storage Bucket
You can access this link for a quick one (https://cloud.google.com/storage). Go to the console menu, then create a bucket. Choose a bucket name, pick anything you want as long as it’s unique. When you choose region and default storage, choose the pre-chosen one. Any details on each configuration can be read more on the documentation. For this example I created a bucket named “navy-1210” with south asia region and standard storage class.
After creating the bucket, you need to generate service account in which required for authenticating your application for the GCP. Go to this link https://cloud.google.com/storage/docs/reference/libraries#client-libraries-install-go for details, and choose “Create Service Account Key” like the image below.
Pick New service account with role of cloud storage → storage object creator. Then click “Create”. After It’s done, you will automatically download a JSON file that you need to keep it for yourself to authenticate later.
2) Create Golang API as an Uploader
We will create a golang simple API in which receive one file from FormFile to be uploaded to cloud storage. The flow consists of:
- Init application credentials needed by GCP to authenticate your app using “GOOGLE_APPLICATION_CREDENTIALS” environment variables to point out the JSON file directory location.
- Create client uploader instance with pre-defined bucket name, project id (your GCP project ID), and upload path (we will use “test-files/”)
- Create a POST API (path: “/upload”) that receives “file_input” Form File
- Trigger upload file to GCP with concatenated upload path as the prefix
- Return success after all process run without error
The full code can be seen below:
3) Upload a File Through the API
I’m using insomnia to test the API, choose a file to be uploaded, on this test I tried to upload an image of honey badger, and it showed that upload was successful.
4) Check the File on GCP
Open your project GCP console, and you can see the test-files folder is created automatically with your file inside of it.
If we want people (publicly) able to access the image / file, we can set it to public via editing the file permission, and add “all user” access.
Copy-ing the URL and you can see the image by opening this image on new tab:
https://storage.googleapis.com/navy-1210/test-files/honeybadger.jpg
Then, you can create any creative things you have in mind :)