如何通过“ drive.files.get()”(Drive Api v3,Node JS)获得下载文件的名称?

问题描述 投票:0回答:1

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

 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个回答
0
投票
  • 您想使用Drive API在Google云端硬盘上使用原始文件名下载文件。
  • 您想使用带有Node.js的googleapis实现此目的。
  • 您已经能够使用Drive API从Google云端硬盘下载文件。
  • 如果我的理解是正确的,那么这个答案呢?

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

修改的脚本:从:
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);
    }
  );
});

参考:

  • Files: get
  • 如果这不是您想要的方向,我很抱歉。

    © www.soinside.com 2019 - 2024. All rights reserved.