NodeJS流式传输远程文件并将其压缩并存储在本地

时间:2018-11-27 17:55:33

标签: node.js streaming node-streams

我正在尝试下载一个远程文件,并将其压缩并保存到本地节点服务器中。 我正在使用节点8.11.4

如果我没有压缩代码,则代码可以正常运行,但是当我压缩它时,代码将停止工作

因此,以下代码可以正常工作

const fs = require('fs')
const https = require('https')

const url = remoteurl // a url that is pointing to a pdf file
https.get(url, (res) => {
  res.pipe(fs.createWriteStream("./local-pdf.pdf"))
  .on('finish', () => {
     console.log('you finished')
   })
})

以上代码将正确保存pdf文件。

但是当我尝试将其压缩到流中时,就像这样

const fs = require('fs')
const zlib = require('zlib')
const https = require('https')

const url = remoteurl
https.get(url, (res) => {
  res.
   pipe(zlib.createGzip())
   pipe(fs.createWriteStream("./local-zip.zip"))
  .on('finish', () => {
     console.log('you finished')
   })
})

它生成一个zip文件,但是当我打开它时,它告诉我它不是有效的zip文件。虽然如果我在本地使用zlib压缩文件,则可以正常工作

在管道上我需要做些什么吗?

1 个答案:

答案 0 :(得分:1)

要弄清楚什么对您不起作用有点困难。您的代码有一些错别字,因此它不应该一开始就运行,但是如果您修复了这些错字,对我来说就很好了。

您使用哪个程序尝试打开.zip

(顺便说一句:也许考虑将文件结尾在.gz上,因为那是gzip压缩数据的正确文件结尾)