下载文件Google API

时间:2017-04-30 14:11:23

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

我使用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;
    });
  });
你知道吗?我该如何解决这个错误?

3 个答案:

答案 0 :(得分:0)

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

drive.files.export

答案 1 :(得分:0)

我花了一些时间弄清楚这一点,终于有了一个下载功能可以工作(当前在控制台中打印):

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)
  })
};

答案 2 :(得分:0)

在Nodejs中,此代码可将文件从Google驱动器下载到给定的目的地。 downloadedfileName是下载后提供的文件的名称。 PresentationId是Google驱动器文件的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);
        }
      );
    });
  }```