【问题标题】:NodeJS stream a remote file and zip it, and store it locallyNodeJS 流式传输远程文件并将其压缩,并将其存储在本地
【发布时间】:2018-11-29 07:49:58
【问题描述】:

我正在尝试下载一个远程文件,并将其压缩并保存到本地节点服务器中。 我正在使用节点 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 压缩文件,它工作正常

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

【问题讨论】:

  • 我首先比较两个文件的标题。至少两者都应该以 gzip 魔术头(即 0x1f 0x8b)开头。

标签: node.js streaming node-streams


【解决方案1】:

很难理解什么不适合你。你的代码有一些错别字,所以它不应该首先运行,但如果你修复这些错别字,它对我来说就很好。

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

(顺便说一句:也许可以考虑让文件以.gz 结尾,因为这是 gzip 压缩数据的正确文件结尾)

【讨论】:

  • 你是对的。它应该是.gz。我会改正错字
猜你喜欢
  • 2016-02-20
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 2021-06-03
  • 2020-08-31
  • 1970-01-01
  • 2015-07-13
  • 1970-01-01
相关资源
最近更新 更多