UNPKG

google-drive-mysql-backup

Version:
61 lines (52 loc) 2.04 kB
const { google } = require('googleapis'); const fs = require('node:fs'); /** * Uploads a file to Google Drive. * * @param {string} privateKeyPath - The path to the private key JSON file. * @param {string} filename - The name of the file to upload. * @param {string} parent_folder_id - The ID of the parent folder on Google Drive. * @param {boolean} delete_after_upload - Whether to delete the file after upload. */ function uploadFileOnGoogleDrive(key, filename, parent_folder_id, delete_after_upload = false) { // Initialize JWT client for authentication const jwtClient = new google.auth.JWT( key.client_email, null, key.private_key, ['https://www.googleapis.com/auth/drive'], null ); // Create Google Drive instance const drive = google.drive('v3'); jwtClient.authorize((authErr) => { if (authErr) return { message: 'Authentication failed: ' + authErr } const fileMetadata = { name: filename, parents: [parent_folder_id] }; const media = { mimeType: 'text/plain', body: fs.createReadStream(filename) }; drive.files.create({ auth: jwtClient, resource: fileMetadata, media, fields: 'id' }, (err, file) => { if (err) return { message: 'An error occurred while uploading the file: ' + err } if (delete_after_upload) { fs.unlink(filename, (err) => { if (err) { return { id: file.data.id, name: filename, message: 'File uploaded but could not be deleted: ' + err }; } return { id: file.data.id, name: filename, message: 'File uploaded and deleted successfully!' } }); } else { return { id: file.data.id, name: filename, message: 'File uploaded successfully!' } } }); }); } module.exports = uploadFileOnGoogleDrive;