简体   繁体   中英

How do I upload a string as a file to Google Drive?

here's my problem :

I want to create a Google Sheets extension in which I basically extract data from a sheet in Google Sheets, that I modify using methods in node JS. Then, having the data that I modified in a string, I want to upload that string into the client's Drive, in a csv or xml file. Therefore I don't have a local file that I can use to upload the file, just a string variable. How do I upload that string ? Thanks a lot, that's my first app and I'm struggling a bit.

Code

const {google} = require ('googleapis'); 
const keys = require ('./keys.json'); 
const client = new google.auth.JWT( 
  keys.client_email, null, 
  keys.private_key,
  ['googleapis.com/auth/drive'],
  'https://www.googleapis.com/…' 
); 
client.authorize(function(err, tokens){ 
  if (err){ 
    console.log(err); 
    return 
  } else { 
    console.log('Connected'); 
    gsrun(client); 
  } 
}); 

async function gsrun(cl) { 
  const gsapi = google.sheets({version: 'v4', auth: cl}); 
}

You have to set your file's metadata and the data it will contain (it's important the MIME type for this case must be text/csv ) and the file's body will be a simple string. This code will help you taking into consideration you already did the OAuth process and have the string you want to insert:

module.exports.init =  async function (){
    // Before calling the API, build your own Drive service instance 
    // In the second argument, you must pass your own string message 
    const pro = await uploadSimpleString(drive, null);
    console.log(pro);
  
} 

uploadSimpleString = (drive, message) => {
  // Set file metadata and data
  message = message || 'This is a simple String nice to meet you';
  const fileMetadata = {'name': 'uploadSimpleStringt.csv'};
  const media = {
    mimeType: 'text/csv',
    body: message
  };
  // Return the Promise result after completing its task
  return new Promise((resolve, reject) => {
    try{
      // Call Files: create endpoint
      return drive.files.create({
        resource: fileMetadata,
        media: media,
        fields: 'id'
      },(err, results) => { 
        // Result from the call
        if(err) reject(`Drive error: ${err.message}`);
        resolve(results);
      })
    } catch (error){
      console.log(`There was a problem in the promise: ${error}`);
    }
  });
}

Notice

To test this code, run it in your CLI using this command:

node -e 'require("./index.js").init()'

Where index.js is your file's name and init() is your main function.

Docs

For more info, please check these links and also consider using the [google-drive-api] tag in that way, there are more chances to receive help because more people will be able to find your question.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM