To upload files to Google Cloud Storage, you'll need to create a bucket and obtain a signed URL. You can use the Google Cloud Console or the Cloud Storage client libraries to create a bucket.
A signed URL is a time-limited URL that grants temporary access to an object in Cloud Storage. You can generate a signed URL using the Cloud Storage client libraries or the Google Cloud Console.
To create a signed URL, you'll need to specify the bucket name, object name, and expiration time. You can also specify additional parameters, such as the HTTP method and query parameters.
The signed URL will have a limited lifetime, typically between 1 hour and 7 days, depending on the bucket's configuration.
If this caught your attention, see: Google Storage Bucket
Uploading Files
Uploading files to Google Cloud Storage can be a bit tricky, but with the right approach, it's a breeze. You'll need to create a new OAuth2 service using the getStorageService function, which will give you the access token required to upload files.
To ensure your upload is successful, always use the error returned from Writer.Close to determine if the upload was successful. This is because writes happen asynchronously, and Write may return a nil error even though the write failed.
The access token obtained from the OAuth2 service is crucial for uploading files to Google Cloud Storage. You can use the getAccessToken method to get this token.
Here are some useful resources to help you with your Cloud Storage upload:
- About Cloud Storage
- API documentation
- Go client documentation
- Complete sample programs
To make sure your data is uncorrupted, use an MD5 or CRC32c checksum. This will help prevent errors and ensure your upload is successful. Always use a checksum to verify the integrity of your data.
A unique perspective: What Is Azure Storage
Client Setup
Creating a client for Google Cloud Storage is a straightforward process. You can create a client using your default application credentials, which is recommended over creating a new client as needed.
The client is safe for concurrent use by multiple goroutines, so you can reuse it without worrying about performance issues. You can also configure the client by passing in options from the google.golang.org/api/option package.
If you only need to access public data, you can create an unauthenticated client by using the WithJSONReads option. Alternatively, you can set the STORAGE_EMULATOR_HOST environment variable to use an emulator with this library.
Config File Setup
To start, you'll need to set up the configuration file, which involves several steps.
First, you'll need to determine if you're deploying outside GCP, in which case you'll need to follow the steps for setting up Google authentication.
Set the #bucketName# field and replace Bucket-name with your previously created bucket.
The default baseUrl is working, but you can replace it with your own custom baseUrl if needed.
Save the configuration file, and you're good to go!
If you're deploying to GCP products like App Engine, Cloud Run, and Cloud Functions, you can use application default credentials for a minimal setup.
In this case, you'll need to edit the ./config/plugins.js file.
You can set the publicFiles option to false, which will sign the assets on the Content Manager instead of the Content API.
This means the assets will only be visible to authenticated users.
To override the plugins.js file by environment, you can create a new file in the config/env/{env}/ folder, such as config/env/development/plugins.js or config/env/production/plugins.js.
This will override the default configuration in the main config folder.
You can also set the expiry time of the signed URL by setting the expires option in the providerOptions object.
Recommended read: Azure File Share vs Blob
Virtual Hosted Style
Virtual Hosted Style is a useful feature that allows you to generate a URL relative to the bucket's virtual hostname. For example, if you have a bucket named "my-bucket" and an object named "image.jpg", the VirtualHostedStyle would generate a URL like "my-bucket.storage.googleapis.com/image.jpg".
To use VirtualHostedStyle, you can call the VirtualHostedStyle function, which is added in version 1.7.0. This function is useful for creating URLs that can be used for uploading objects to a bucket.
You can limit the time to write an object by using context.WithTimeout, as mentioned in the documentation. This is a good practice to prevent long-running operations.
New Client
To create a new client, you can use the NewClient function, which creates a new Google Cloud Storage client using the HTTP transport. The default scope is ScopeFullControl, but you can use option.WithScopes to specify a different scope.
The NewClient function is safe for concurrent use by multiple goroutines, so you can reuse clients instead of creating new ones as needed. This is a good practice to follow for efficiency and performance.
Check this out: Free Onedrive Storage Limit
You can also create an unauthenticated client using the NewClient function, which can be used to access public data. This is a convenient option if you only need to access public data.
To use the NewClient function, you need to provide the HTTP transport, which is the underlying protocol used to communicate with Google Cloud Storage. The NewClient function will take care of the rest, creating a new client instance that you can use to interact with the service.
Remember to reuse clients instead of creating new ones as needed, as this can improve performance and efficiency.
Worth a look: How Do I Access Google Cloud Storage
UserProject
UserProject is a crucial concept to understand when working with Buckets. It allows you to pass a project ID as the user project for all subsequent calls.
A user project is required for all operations on Requester Pays buckets, which means you can't perform any operations without one.
To create a user project, you can use the UserProject method of the BucketHandle, which returns a new BucketHandle with the project ID set as the user project.
This new BucketHandle will be billed to the specified project rather than the bucket's owning project.
XML Reads Version 1.30.0
XML Reads Version 1.30.0 is a significant update that affects how your client interacts with Cloud Storage.
The WithXMLReads option, introduced in version 1.30.0, allows you to specify that your client use the Cloud Storage XML API for object reads. This is the current default behavior.
In a future release, the default will switch to JSON, so it's a good idea to familiarize yourself with this option now.
Type Autoclass 1.28.0
Autoclass is a feature that holds the bucket's autoclass configuration. It's added in version 1.28.0.
Autoclass allows for the automatic selection of the best storage class based on object access patterns. This means you can let the system decide which storage class to use based on how your objects are being accessed.
If enabled, Autoclass enables automatic selection of the best storage class. This can help optimize storage costs and improve performance.
Autoclass is available for more information at https://cloud.google.com/storage/docs/using-autoclass.
A unique perspective: Aws S3 Storage Types
Type BucketAttrsToUpdate
To update a bucket, you need to specify the attributes you want to change. This is done using BucketAttrsToUpdate, which define the attributes to update during an Update call.
The attributes to update are defined in a specific format, where each attribute is specified with its new value. This allows you to update multiple attributes at once, making it more efficient than updating them one by one.
You can update various attributes, such as the bucket's name, description, or metadata. The exact attributes you can update depend on the service you're using and the specific bucket you're working with.
Retryer 1.19.0
Retryer 1.19.0 is a powerful tool that allows you to customize the retry behavior of your bucket handle.
You can return a bucket handle with custom retry behavior by using the Retryer function, which is added in version 1.19.0. This function takes options that specify the custom retry behavior.
To use Retryer, you must explicitly pass in each option you want to override, as options passed into this method will take precedence over options set on the client.
Retryer options will merge with the client's retry configuration, if set, for the returned handle. This means you can configure the retry behavior for a specific bucket handle without affecting the client's overall retry configuration.
You might like: Google Analytics 4 Custom Events
Retry options set on a bucket handle will take precedence over options set on the client, so you can fine-tune the retry behavior for each bucket handle as needed.
Note that you should call Retryer once before using the client for network operations, as there could be indeterminate behavior with operations in progress.
Google Apps Script Code
To write Google Apps Script code, start by going to script.new to create a new Google Apps Script project.
From there, click on Libraries and add the OAuth2 library 1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF to your project.
Next, add a new file called service.js, where you can use the values of private_key and client_email from your service account JSON file to create a new OAuth2 service.
Related reading: Cloud Computing Service
Gmail Attachments to Drive
Gmail Attachments to Drive is a feature that allows you to save and organize attachments directly to Drive without leaving your inbox.
You can save attachments from Gmail to Drive, making it easy to access and share files with others.
This feature is a great time-saver, eliminating the need to manually download and upload files between the two services.
To use this feature, simply click on the "Save to Drive" button in your Gmail inbox when viewing an email with an attachment.
Recommended read: Save Api Data on Local Storage Next Js
Sync Desktop with Drive
Syncing your desktop with Drive is a game-changer for keeping your files up to date.
Available for both Windows and MacOS, this feature allows you to automatically sync all your Drive files right from your computer.
Get the most out of Drive by having all your files in one place, easily accessible and always up to date.
Sources
- https://pkg.go.dev/cloud.google.com/go/storage
- https://en.wikipedia.org/wiki/Google_Cloud_Storage
- https://www.labnol.org/code/20074-upload-files-to-google-cloud-storage
- https://www.npmjs.com/package/@strapi-community/strapi-provider-upload-google-cloud-storage
- https://workspace.google.com/products/drive/
Featured Images: pexels.com