如何将字符串作为文件上传到 Google Drive?

Posted

技术标签:

【中文标题】如何将字符串作为文件上传到 Google Drive?【英文标题】:How do I upload a string as a file to Google Drive? 【发布时间】:2020-05-05 19:19:02 【问题描述】:

这是我的问题:

我想创建一个谷歌表格扩展,我基本上从谷歌表格中的表格中提取数据,我使用节点 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); 

【问题讨论】:

为了正确理解您访问Drive API和Sheets API的方法,您能否提供您当前的脚本?当然,请删除您的个人信息。 我的 js 文件:const google = require ('googleapis');常量键 = 要求 ('./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); );异步函数 gsrun(cl) const gsapi = google.sheets(version: 'v4', auth: cl); 【参考方案1】:

您必须设置文件的元数据和它将包含的数据(重要的是这种情况下的 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] 标签,这样就有更多机会获得帮助,因为更多人将能够找到您的问题。

How to get Help Files: create G Suite documents and corresponding export MIME types

【讨论】:

非常感谢您的建议。当我运行“node -e 'require("./index.js").init()'”时,我应该在我的驱动器中有 csv 文件吗?因为没有。我拥有我的范围所需的所有授权。一定是我做错了什么,或者我不明白你在解释什么。 是的,应该。我认为这是因为您获得的令牌来自“帐户服务”用户(如机器人),而不是您自己的用户(一个人)。从Google Playground 获取访问令牌并自己使用它以查看它是否适用于测试目的,如果有效,则您必须以另一种方式在代码中获取访问令牌

以上是关于如何将字符串作为文件上传到 Google Drive?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Google Colab 下载多个文件或整个文件夹?

IOS:如何使用 Google Drive sdk 库将文件上传到特定的 Google Drive 文件夹

如何使用 AngularJS 将文件上传到 Google Drive

如何使用 Ruby 作为后端将 React 上的图像上传到 Google Cloud Storage

如何使用GoogleServiceAuthentication类将文件上传到Grails中的google存储?

如何将 .gz 文件上传到 Google Big Query?