从谷歌驱动器 api 下载 xls/xlsx 文件

时间:2021-07-13 11:18:11

标签: google-drive-api google-api-nodejs-client

我正在尝试下载 xls 或 xlsx 文件,但出现错误:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "fileNotExportable",
    "message": "Export only supports Docs Editors files."
   }
  ],
  "code": 403,
  "message": "Export only supports Docs Editors files."
 }
}

我正在使用 nodejs。是否可以通过 api 下载 xls xlsx 文件?

代码示例:

export function getFileFromStream(auth, fileId, mimeType) {
  const destPath = `/tmp/${fileId}.xls`;
  const dest = fs.createWriteStream(destPath);
  return new Promise(async (resolve, reject) => {
    const drive = google.drive({version: 'v3', auth});
    drive.files.export(
      { fileId, mimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'},
      { responseType: 'stream'},
      (errrr, response) => {
          response.data
            .on('end', function() {
            console.log('downloaded')
            })
            .on('error', function(err) {
              console.log('Error during download', err);
            })
            .pipe(dest);
      });
  });
}

1 个答案:

答案 0 :(得分:1)

files.export documentation sample 中使用的方法只能用于下载 Google Workspace 文档

要下载非 Google Workspace 文档,您需要使用 files.get 中的 sample for Download a file stored on Google Drive 方法:

export function getFileFromStream(auth, fileId, mimeType) {
  const destPath = `/tmp/${fileId}.xls`;
  const dest = fs.createWriteStream(destPath);
  return new Promise(async (resolve, reject) => {
    const drive = google.drive({version: 'v3', auth});
    drive.files.get({
      fileId: fileId,
      alt: 'media'
    })
      .on('end', function () {
        console.log('Done');
      })
      .on('error', function (err) {
        console.log('Error during download', err);
      })
    .pipe(dest);
}