如何将Google云端硬盘文件传输到Node.js中的响应正文?

时间:2018-02-02 21:28:09

标签: node.js pdf google-drive-api

这是来自访问Google Drive v3的Node.js v8.9.4应用程序。

以下基于Google API文档的服务器端代码(如下所示)从Google云端硬盘获取PDF文件,并将其正确写入服务器上的/downloads/test.pdf。

https://developers.google.com/drive/v3/web/manage-downloads

const TOKEN_DIR = (process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE) + '/downloads/';
const TOKEN_PATH = TOKEN_DIR + 'test.pdf';
var dest = fs.createWriteStream(TOKEN_PATH);

gdrive.files.get({
    auth: oauthclient,
    fileId: id,
    alt: 'media'
})
.on('end', function () {
    console.log('Success');
})
.on('error', function (err) {
    console.log('Error during download', err);
})
.pipe(dest);

我想要做的是在响应中发送PDF文件内容,以便将其下载到浏览器中。以下代码导致响应w /正确的标头返回到浏览器但不下载PDF。查看Chrome调试器,响应正文中似乎没有任何数据。

response.writeHead(200, {
  'Access-Control-Allow-Origin': '*',
  'Access-Control-Allow-Headers': 'X-Requested-With',
  'Content-Type': 'application/pdf',
  'Content-Disposition':'attachment; filename="test1.pdf"'
});

gdrive.files.get({
    auth: oauthclient,
    fileId: id,
    alt: 'media'
})
.on('end', function () {
    console.log('Success');
    response.end();
})
.on('error', function (err) {
    console.log('Error during download', err);
})
.pipe(response);

enter image description here

enter image description here

我错过了什么吗?

1 个答案:

答案 0 :(得分:-1)

如果您要下载文件,我建议files.export。这就是我使用的。您还可以查看Download Files。它表示,如果您使用 files.get ,则应该在URI中加入alt=media