【发布时间】:2021-02-15 03:25:18
【问题描述】:
我正在尝试从 Google 云端硬盘访问 pdf。无论此访问权限是下载还是查看,都无所谓,它只需要可用即可。
我正在使用 Javascript 和 NodeJS,以及 express 和 google drive api。
我有以下下载 pdf 的功能。但愚蠢的我认为这是正确的,因为它在本地工作。然后当我部署它时,我意识到目标文件路径不再有意义。
function downloadDoc (sourceID, targetName, callback) {
const dest = fs.createWriteStream(`${os.homedir()}/downloads/`+targetName);
drive.files.get(
{sourceID, alt: 'media'},
{responseType: 'stream'},
(err, res) => {
if (err) {
console.error(err);
}
res.data.on('end', () => {
console.log('Done downloading file.');
callback();
})
.on('error', err => {
console.error('Error downloading file.');
throw err;
})
.pipe(dest);
});
}
所以我需要做的是,从这个函数中获取数据(或响应?)并将其发送到客户端。我认为这很容易做到,但是,作为一个简单的人,我发现自己陷入了困境。我写了这个,目的是让用户可以点击客户端的链接,请求这个 URL 并调用函数来下载 pdf。
app.get('/download_pdf', (req, res) => {
downloadDoc(documentID, 'docName.pdf', ()=>{
console.log("downloaded pdf");
});
res.end();
});
我想我需要更改提供给 pipe() 的参数,因为显然我不能使用文件路径。
我检查过的类似问题:
Display Pdf in browser using express js
How to send a pdf file from Node/Express app to the browser
Send pdf via express to js client and download
虽然这些问题与此非常相关,但我认为我的问题是由于对回调或请求/响应缺乏了解。我想正确地学习这一点 - 不仅仅是寻求答案 - 但事实上,我的时间变得非常紧迫,并且很快需要一个解决方案。
【问题讨论】:
标签: javascript node.js google-api google-drive-api google-api-nodejs-client