Creates a new instance of GoogleFileStorage.
Initializes the connection to Google Cloud Storage using environment variables. Throws an error if any required environment variables are missing.
Protected_The ID of the FileStorageAccount this driver instance is operating for. Set during initialization via the config parameter.
Protected_The name of the FileStorageAccount (for logging/display purposes).
Protected ReadonlyproviderThe name of this storage provider, used in error messages
Gets the account ID this driver instance is operating for. Returns undefined if the driver was not initialized with an account.
Gets the account name this driver instance is operating for. Returns undefined if the driver was not initialized with an account.
Checks if Google Cloud Storage provider is properly configured. Returns true if service account credentials and bucket name are present. Logs detailed error messages if configuration is incomplete.
Google Cloud Storage supports ranged streaming via File.createReadStream({ start, end }).
Copies an object within Google Cloud Storage.
This method creates a copy of an object at a new location without removing the original. It uses the GCS copy API, which allows for efficient copying within the same bucket.
The name of the object to copy
The name to assign to the copied object
A Promise resolving to a boolean indicating success
Creates a directory (virtual) in Google Cloud Storage.
Since GCS doesn't have a native directory concept, this method creates a zero-byte object with a trailing slash to simulate a directory. The object has a special content type to indicate it's a directory.
The path of the directory to create
A Promise resolving to a boolean indicating success
Creates a pre-authenticated download URL for an object in Google Cloud Storage.
This method generates a signed URL that allows for downloading an object from GCS without needing Google Cloud credentials. The URL is valid for 10 minutes and can be shared with clients.
The name of the object to download (including any path/directory)
A Promise resolving to the download URL
Creates a pre-authenticated upload URL for an object in Google Cloud Storage.
This method generates a signed URL that allows for uploading an object to GCS without needing Google Cloud credentials. The URL is valid for 10 minutes and includes the content type based on the file extension.
The name of the object to upload (including any path/directory)
A Promise resolving to an object with the upload URL
Deletes a directory (virtual) and optionally its contents from Google Cloud Storage.
For non-recursive deletion, this method simply deletes the directory placeholder object. For recursive deletion, it lists all objects with the directory path as prefix and deletes them in parallel.
The path of the directory to delete
If true, deletes all contents recursively (default: false)
A Promise resolving to a boolean indicating success
Deletes an object from Google Cloud Storage.
This method attempts to delete the specified object. It uses the ignoreNotFound option to ensure it returns true even if the object didn't exist.
The name of the object to delete (including any path/directory)
A Promise resolving to a boolean indicating success
Checks if a directory (virtual) exists in Google Cloud Storage.
Since GCS doesn't have a native directory concept, this method checks for either:
The path of the directory to check
A Promise resolving to a boolean indicating if the directory exists
// Check if a directory exists before trying to save files to it
const exists = await gcsStorage.DirectoryExists('documents/reports/');
if (!exists) {
console.log('Directory does not exist, creating it first');
await gcsStorage.CreateDirectory('documents/reports/');
}
// Now safe to use the directory
await gcsStorage.PutObject('documents/reports/new-report.pdf', fileData);
Downloads an object's content from Google Cloud Storage.
This method retrieves the full content of an object and returns it as a Buffer for processing in memory.
Object identifier (objectId and fullPath are equivalent for GCS)
A Promise resolving to a Buffer containing the object's data
try {
// For GCS, objectId and fullPath are the same (both are the object name)
const content = await gcsStorage.GetObject({ fullPath: 'documents/config.json' });
// Or equivalently:
const content2 = await gcsStorage.GetObject({ objectId: 'documents/config.json' });
// Parse the JSON content
const config = JSON.parse(content.toString('utf8'));
console.log('Configuration loaded:', config);
} catch (error) {
console.error('Failed to download file:', error.message);
}
Retrieves metadata for a specific object in Google Cloud Storage.
This method fetches the properties of an object without downloading its content, which is more efficient for checking file attributes like size, content type, and last modified date.
Object identifier (objectId and fullPath are equivalent for GCS)
A Promise resolving to a StorageObjectMetadata object
try {
// For GCS, objectId and fullPath are the same (both are the object name)
const metadata = await gcsStorage.GetObjectMetadata({ fullPath: 'documents/report.pdf' });
// Or equivalently:
const metadata2 = await gcsStorage.GetObjectMetadata({ objectId: 'documents/report.pdf' });
console.log(`File: ${metadata.name}`);
console.log(`Size: ${metadata.size} bytes`);
console.log(`Last modified: ${metadata.lastModified}`);
} catch (error) {
console.error('File does not exist or cannot be accessed');
}
Streams an object's content from Google Cloud Storage, optionally honoring a byte range.
Uses File.createReadStream({ start, end }), which returns a Node.js readable stream backed
by GCS's native HTTP Range support — the object is never buffered fully in memory. The
inclusive Range.Start/Range.End map directly to GCS's inclusive start/end options.
createReadStream doesn't surface the total object size or content type, so this method
resolves them via GetObjectMetadata (mirroring the Box driver) to populate
ObjectStreamResult.ContentLength / ContentType / ContentRange. The supplied range
is clamped to the object size so ContentRange.End is always valid.
Object identifier (objectId and fullPath are equivalent for GCS) plus optional Range.
A Promise resolving to an ObjectStreamResult.
Initialize Google Cloud Storage provider.
Always call this method after creating an instance.
Optionalconfig: StorageProviderConfigOptional. Omit to use env vars, provide to override with database creds.
Lists objects with the specified prefix in Google Cloud Storage.
This method returns a list of objects (files) and prefixes (directories) under the specified path prefix. It uses the GCS getFiles API which supports delimiter-based hierarchy simulation.
Note: This implementation fetches metadata for each file, which can be inefficient for directories with many files. In a production environment, you might want to optimize this for large directories.
The path prefix to list objects from (e.g., 'documents/')
The character used to simulate directory structure, defaults to '/'
A Promise resolving to a StorageListResult containing objects and prefixes
// List all files and directories in the documents folder
const result = await gcsStorage.ListObjects('documents/');
// Process files
for (const file of result.objects) {
console.log(`File: ${file.name}, Size: ${file.size}, Type: ${file.contentType}`);
}
// Process subdirectories
for (const dir of result.prefixes) {
console.log(`Directory: ${dir}`);
}
Moves an object from one location to another within Google Cloud Storage.
Unlike some other storage providers, GCS has a native rename operation that can be used to efficiently move objects without needing to copy and delete. This method leverages that capability.
The current name/path of the object
The new name/path for the object
A Promise resolving to a boolean indicating success
Checks if an object exists in Google Cloud Storage.
This method verifies the existence of an object without downloading its content. This is efficient for validation purposes.
The name of the object to check
A Promise resolving to a boolean indicating if the object exists
// Check if a file exists before attempting to use it
const exists = await gcsStorage.ObjectExists('documents/report.pdf');
if (exists) {
console.log('File exists, proceeding with download');
const content = await gcsStorage.GetObject('documents/report.pdf');
// Process the content...
} else {
console.log('File does not exist');
}
Uploads data to an object in Google Cloud Storage.
This method directly uploads a Buffer of data to an object with the specified name. It's useful for server-side operations where you already have the data in memory.
The name to assign to the uploaded object
The Buffer containing the data to upload
OptionalcontentType: stringOptional MIME type for the object (inferred from name if not provided)
Optionalmetadata: Record<string, string>Optional key-value pairs of custom metadata to associate with the object
A Promise resolving to a boolean indicating success
// Upload a text file
const content = Buffer.from('Hello, World!', 'utf8');
const uploaded = await gcsStorage.PutObject(
'documents/hello.txt',
content,
'text/plain',
{ author: 'John Doe', department: 'Engineering' }
);
if (uploaded) {
console.log('File uploaded successfully');
} else {
console.log('Failed to upload file');
}
Search is not supported by Google Cloud Storage. GCS is an object storage service without built-in search capabilities.
To search GCS objects, consider:
The search query (not used)
Optionaloptions: FileSearchOptionsSearch options (not used)
ProtectedthrowHelper method to throw an UnsupportedOperationError with appropriate context. This method simplifies implementation of methods not supported by specific providers.
The name of the method that is not supported
Google Cloud Storage implementation of the FileStorageBase interface.
This class provides methods for interacting with Google Cloud Storage as a file storage provider. It implements all the abstract methods defined in FileStorageBase and handles Google-specific authentication, authorization, and file operations.
It requires the following environment variables to be set:
Example