在Google云端硬盘中下载进度 [英] Downloading progress in Google Drive

查看:102
本文介绍了在Google云端硬盘中下载进度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的Meteor服务器应用程序中,我正在使用此代码从Google云端硬盘下载文件,

In my Meteor server app, I am downloading a file from Google Drive using this code,

var dest = fs.createWriteStream('/data/'+data.name);
        drive.files.get({
           fileId: data.id,
           alt: 'media',
           auth: jwtClient
        })
        .on('end', Meteor.bindEnvironment(function() {

        }))
        .on('error', function(err) {
          console.log('Error during download', err);
        })
        .pipe(dest);

如何获取下载进度?例如,我希望每30秒使用console.log()

How can I get the progress of the download? For example, i want every 30 seconds to display progress of the download using console.log()

我可以使用.on('data')吗?我正在使用Google提供的google drive nodejs v3.

Can I use .on('data')? I am using google drive nodejs v3 provided by Google.

推荐答案

您可以从drive.files.list中获取带有文件名的File meta(id,名称,大小),然后可以下载文件.

You can get File meta (id, name, size) from drive.files.list with file name, then you can download the file.

使用用于Google驱动器的Node.js快速入门进行身份验证.

我正在使用进度流测量收到的数据百分比.

I am using progress-stream to measure % data received.

var callAfterDownload = function (fileName, callback) {
  drive.files.list({
    auth: oauth2Client,
    pageSize: 1,
    q: 'name=\'' + fileName + '\'',
    fields: 'nextPageToken, files(id, name, size)'
  }, function (err, response) {
    if (err) {
      console.log('The API returned an error: ' + err)
      callback(['Error while download'])
    } else {
      var files = response.files
      //when only one file is matched we will download
      if (files.length === 1) {

        var file = files.pop()
        console.log('%s (%s)', file.name, file.id)
        var dest = fs.createWriteStream(file.name)
        var progress = Progress({time:100, length: file.size})

        //downloading matched file from drive
        drive.files.get({
          auth: oauth2Client,
          fileId: file.id,
          alt: 'media'
        }).on('error', function (err) {
          console.log('Error during download', err)
          callback(['Error while download'])
        }).pipe(progress).pipe(dest)

        //checking progress of file
        progress.on('progress', function(progress) {
          console.log('download completed ' +progress.percentage.toFixed(2) + '%')
        });

        //when write stream has finally written to file
        dest.on('finish', callback)

      } else {
        console.log('EXITING......More than one/no file exist with same name, make sure you have unique file name.')
        callback()
      }
    }
  })
}


function downloadDriveFile () {
  var fileName = 'testfile.doc'
  callAfterDownload(fileName, function (err) {
    if(err) throw err
    //your logic to do anything with the file
  })
}

downloadDriveFile();

这篇关于在Google云端硬盘中下载进度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆