【问题标题】:Download File Google API下载文件 Google API
【发布时间】:2017-04-30 14:11:23
【问题描述】:

我使用 Node.js,但 service.api.export 出现错误。 我的 console.log 发送给我:下载“Manuel Utilisation.pdf ...” 下载“Manuel Utilisation.pdf”!但我的浏览器没有下载,我有这个错误: { 错误:导出仅支持 Google 文档。}

在调用此函数之前,我会使用我的 bdd 中的令牌执行 setcredentiel。

我使用这个函数来下载一个带有 idFile 的文件:

function downloadFiles(auth, fileId) {
 drive.files.get({fileId: fileId }, function (err, metadata) {
    if (err) {
      console.error("Error GET files :" +  err);
      return process.exit();
    }

    console.log('Downloading %s...', metadata.name);

    var dest = fs.createWriteStream(metadata.name);

    drive.files.export({fileId: fileId, mimeType: 'application/pdf'}).on('error', function (err) {
      console.log('Error downloading file', err);
      process.exit();
    }).pipe(dest);

    dest.on('finish', function () {
        console.log('Downloaded %s!', metadata.name);
        return true
    }).on('error', function (err) {
      console.log('Error writing file', err);
      return false;
    });
  });

你有什么想法吗?我该如何解决这个错误?

【问题讨论】:

  • 您要从 Google 驱动程序下载文件还是下载文件并将其转换为 PDF?
  • 我想从谷歌驱动器下载一个文件到我的电脑
  • 您的代码对于 Google 文档文件是正确的 - 例如。 Docs、Sheet、Slides 等。如果文件是外部格式,例如 excel、pdf、图像等,tokeryberg 的回答是正确的。错误消息暗示您正在尝试导出非 Google 文档文件。跨度>

标签: node.js google-api google-drive-api


【解决方案1】:

看起来对drive.files.export 的调用会引发错误。幸运的是,您只需拨打drive.files.get,而不是drive.files.export。根据Google's Documentation 中的示例,您的函数应如下所示。请注意,该示例没有为您提供您尝试下载的文件的元数据。它可能会被传递给“on error”函数。

function downloadFiles(auth, fileId) {
  var dest = fs.createWriteStream('/some/file/path');
  drive.files.get({fileId: fileId, alt: 'media' })
    .on('end', function() {
     console.log('Downloaded %s!', 'some file');
    })
    .on('error', function(err){
      console.error("Error GET files :" +  err);
      return process.exit();
    })
    .pipe(dest);
  }

【讨论】:

    【解决方案2】:

    我花了一些时间解决这个问题,终于得到了一个下载功能(目前在控制台中打印):

    function download(auth){
      const drive = google.drive({version: 'v3', auth})
      var request =  drive.files.export({
        fileId: '_____fileid______',
        mimeType: 'text/html'
      }, {alt: 'media'}, (err, result) => {
        if (err) console.log(err)
        else console.log(result)
      })
    };
    

    【讨论】:

      【解决方案3】:

      在 Nodejs 中,此代码可以将文件从谷歌驱动器下载到给定的目的地。 下载文件名是下载后给出的文件名。 presentationId 是谷歌驱动文件的id

      const downloadFile = async(auth,downloadedfileName,presentationId)=>{
          return new Promise((resolve, reject) => {
      
            const dest = fs.createWriteStream(downloadedfileName);
            const drive = google.drive({version: 'v3', auth});
            drive.files.get({fileId: presentationId, alt: 'media'}, {responseType: 'stream'},
              function(err, res){
                res.data
                .on('end', () => {
                  resolve(downloadedfileName)
                })
                .on('error', err => {
                    reject('Error');
                })
                .pipe(dest);
              }
            );
          });
        }```
      

      【讨论】:

        猜你喜欢
        • 2015-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-28
        • 2015-02-06
        • 2022-01-03
        相关资源
        最近更新 更多