【问题标题】:How to get the name of the downloaded file with "drive.files.get ()" (Drive Api v3, Node JS)?如何使用“drive.files.get()”(Drive Api v3,Node JS)获取下载文件的名称?
【发布时间】:2019-12-15 20:51:08
【问题描述】:

此脚本运行良好,但我不知道如何获取文件名。感谢您的帮助

 module.exports.getFile = (id, callback) =>{
    fs.readFile(SECRET_PATH, (err, content) => {
        if (err) return console.log('Error loading client secret file:', err);
        authorize(JSON.parse(content), id, (auth, id)=>{
            var dest = fs.createWriteStream(__dirname + '/tmp.mp3'); // temporal name
            const drive = google.drive({version: 'v3', auth});
            drive.files.get({fileId: id, alt: 'media'},
                {responseType:'stream'},
                function(err, res){
                    res.data.on('end', () => {
                        console.log('done');
                        var filename = 'noname' ; // this is a question
                        fs.rename('/tmp.mp3', '/' + filename + '.mp3', function(err) {
                            if(err) return console.log('error: ', err);
                            callback(filename);
                        });
                    }).on('error', err => {
                        console.log('Error', err);
                    }).pipe(dest);
            }); 
        });
    });
};

【问题讨论】:

    标签: node.js google-drive-api


    【解决方案1】:
    • 您希望使用 Drive API 使用 Google Drive 上的原始文件名下载文件。
    • 您希望使用带有 Node.js 的 googleapis 来实现此目的。
    • 您已经能够使用 Drive API 从 Google Drive 下载文件。

    如果我的理解是正确的,那么这个答案呢?

    Drive API中Files:get方法使用alt=media时,不返回文件元数据。因此,为了获取文件名,首先,它使用 Files: get without alt=media in Drive API 的方法获取文件元数据。

    修改脚本:

    从:
    var dest = fs.createWriteStream(__dirname + '/tmp.mp3'); // temporal name
    const drive = google.drive({version: 'v3', auth});
    drive.files.get({fileId: id, alt: 'media'},
        {responseType:'stream'},
        function(err, res){
            res.data.on('end', () => {
                console.log('done');
                var filename = 'noname' ; // this is a question
                fs.rename('/tmp.mp3', '/' + filename + '.mp3', function(err) {
                    if(err) return console.log('error: ', err);
                    callback(filename);
                });
            }).on('error', err => {
                console.log('Error', err);
            }).pipe(dest);
    });
    
    到:
    const drive = google.drive({version: 'v3', auth});
    drive.files.get({ fileId: id }, (er, re) => { // Added
      if (er) {
        console.log(er);
        return;
      }
      var dest = fs.createWriteStream(__dirname + '/' + re.data.name); // Modified
      drive.files.get(
        { fileId: id, alt: "media" },
        { responseType: "stream" },
        function(err, res) {
          res.data
            .on("end", () => { // Modified
              console.log("done");
            })
            .on("error", err => {
              console.log("Error", err);
            })
            .pipe(dest);
        }
      );
    });
    

    参考资料:

    如果这不是您想要的方向,我深表歉意。

    【讨论】:

    • 这正是我想要的方向,并且工作正常。太感谢了!!!你是个天才......现在我觉得自己很白痴=((对不起我的英语,我是尼安德特人)c u later...
    • @Isma Pena 感谢您的回复。我很高兴你的问题得到了解决。也谢谢你。
    猜你喜欢
    • 2023-02-06
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    相关资源
    最近更新 更多