google-drive-mysql-backup
Version:
Backs up your mysql data to your google drive
61 lines (52 loc) • 2.04 kB
JavaScript
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;