此脚本可以完美运行,但我不知道如何获取文件名。感谢您的帮助
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);
});
});
});
};
如果我的理解是正确的,那么这个答案呢?
当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);
}
);
});
如果这不是您想要的方向,我很抱歉。