GCS Image Uploader
The snippet can be accessed without any authentication.
Authored by
Dani Fithrantyo
Edited
gcs-image-uploader.js 3.26 KiB
/**
* Google Cloud Storage Image Uploader (Simplified)
*
* This script uploads all images from a local folder to a Google Cloud Storage bucket
* with a common prefix to simulate a folder structure.
*
* Prerequisites:
* - Node.js installed
* - Google Cloud SDK configured or service account key available
* - @google-cloud/storage package installed (npm install @google-cloud/storage)
*/
const { Storage } = require('@google-cloud/storage');
const fs = require('fs');
const path = require('path');
// Configuration - replace these values with your own
const BUCKET_NAME = 'dev-banking-jago-partner';
const PREFIX = 'temp-stockbit-ktp-images/'; // This simulates a folder in GCS (e.g., 'images/')
const LOCAL_IMAGES_FOLDER = './stockbit-ktp'; // Path to your local images folder
const IMAGE_EXTENSIONS = ['.jpg', '.jpeg', '.png', '.gif', '.webp', '.svg', '.bmp', '.tiff'];
// Initialize Google Cloud Storage
const storage = new Storage();
const bucket = storage.bucket(BUCKET_NAME);
/**
* Checks if a file is an image based on its extension
* @param {string} filePath - Path to the file
* @returns {boolean} - True if the file is an image
*/
function isImage(filePath) {
const ext = path.extname(filePath).toLowerCase();
return IMAGE_EXTENSIONS.includes(ext);
}
/**
* Uploads a file to Google Cloud Storage
* @param {string} localFilePath - Path to the local file
* @param {string} destinationFileName - Name to give the file in GCS
*/
async function uploadFile(localFilePath, destinationFileName) {
try {
await bucket.upload(localFilePath, {
destination: destinationFileName,
// Optional: set metadata
metadata: {
cacheControl: 'public, max-age=31536000',
},
});
console.log(`Uploaded ${localFilePath} to ${destinationFileName}`);
return true;
} catch (error) {
console.error(`Error uploading ${localFilePath}:`, error);
return false;
}
}
/**
* Main function to upload all images
*/
async function uploadImagesToGcs() {
console.log('Starting image upload process...');
// Check if local folder exists
if (!fs.existsSync(LOCAL_IMAGES_FOLDER)) {
console.error(`Local folder ${LOCAL_IMAGES_FOLDER} does not exist!`);
return;
}
// Read all files from local folder
const files = fs.readdirSync(LOCAL_IMAGES_FOLDER);
const imageFiles = files.filter(file =>
isImage(file) && fs.statSync(path.join(LOCAL_IMAGES_FOLDER, file)).isFile()
);
console.log(`Found ${imageFiles.length} images to upload`);
if (imageFiles.length === 0) {
console.log('No images found to upload. Make sure your local folder contains image files.');
return;
}
// Upload each image
const uploadPromises = imageFiles.map(file => {
const localFilePath = path.join(LOCAL_IMAGES_FOLDER, file);
const destinationPath = `${PREFIX}${file}`;
return uploadFile(localFilePath, destinationPath);
});
// Wait for all uploads to complete
const results = await Promise.all(uploadPromises);
// Count successes
const successCount = results.filter(result => result).length;
console.log(`Upload complete. Successfully uploaded ${successCount} of ${imageFiles.length} images.`);
}
// Execute the main function
uploadImagesToGcs().catch(err => {
console.error('Unhandled error in upload process:', err);
});
Please register or sign in to comment