如何通过 Google Drive API (NodeJS) 上传 Google Apps 脚本

How to Upload a Google Apps Script via the Google Drive API (NodeJS)

我正在尝试使用 Google API NodeJS client 将 Google Apps 脚本上传到我的驱动器。我按照文档中的说明进行操作,但是当文件上传到我的驱动器时,我只能将其作为纯文本而不是 Apps 脚本上传。

function uploadAppScript(auth) {
return new Promise(function(resolve, reject) {
  var drive = google.drive('v3')
  drive.files.create({
    auth: auth,
    resource: {
      name: 'myscript',
      mimeType: 'application/vnd.google-apps.script'
    },
    media: {
      mimeType: 'text/plain',
      body: fs.createReadStream('src/myscript.gs') 
    },
  }, function(err, result){
       ... //not relevant
  })
})

}

自述文件的 media uploads 部分未指定如何上传 png 以外的任何内容。

如果我将 media 对象中的 mimeType 更改为 text/plain 以外的任何内容,我会收到以下(非信息性)错误:

code: 400,
  errors: 
    [ { domain: 'global',
        reason: 'badRequest',
        message: 'Bad Request' } ] }

关于如何让 Drive 将其识别为 Apps 脚本而不是纯文本文件的任何想法?还是 NodeJS 客户端出了问题?

所以这显然是 google-api-nodejs-client 的错误,但是库的维护者能够在文档无法帮助我的地方帮助我。以下将允许您将 .gs 文件正确上传到 Google 驱动器:

drive.files.create({
  resource: {
    name: 'myscript.gs',
    mimeType: 'application/vnd.google-apps.script+json'
  },
  media: {
    mimeType: 'application/vnd.google-apps.script+json',
    body: JSON.stringify({
      files: [
        {
          source: fs.readFileSync('src/myscript.gs', { encoding: 'utf-8' }),
          name: 'myscript',
          type: 'server_js'
        }
      ]
    })
  }
}, function (err, file) {
  // ...
});