Как загрузить строку в виде файла на Google Drive? - PullRequest
1 голос
/ 19 января 2020

вот моя проблема:

Я хочу создать расширение Google Sheets, в котором я в основном извлекаю данные из листа в Google Sheets, которые я изменяю, используя методы в node JS. Затем, имея данные, которые я изменил в строке, я хочу загрузить эту строку на диск клиента в файл csv или xml. Поэтому у меня нет локального файла, который я могу использовать для загрузки файла, только строковая переменная. Как мне загрузить эту строку? Большое спасибо, это мое первое приложение, и я немного борюсь.

Код

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}); 
}

1 Ответ

1 голос
/ 21 января 2020

Вы должны установить метаданные вашего файла и данные, которые он будет содержать (важно, чтобы тип MIME для этого случая был text/csv), а тело файла было бы простой строкой. Этот код поможет вам принять во внимание, что вы уже выполнили процесс OAuth и у вас есть строка, которую вы хотите вставить:

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}`);
    }
  });
}

Уведомление

Чтобы протестировать этот код, запустите его в CLI, используя эта команда:

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

Где index.js - имя вашего файла, а init() - ваша основная функция.

Документы

Для получения дополнительной информации, пожалуйста, проверьте эти ссылки а также рассмотрите возможность использования тега [google-drive-api] таким образом, у вас больше шансов получить помощь, потому что больше людей смогут найти ваш вопрос.

...