如何将字符串作为文件上传到 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