我想让客户端gzip
在特定的 url 上下载压缩文件。我几乎可以正常工作 - 下载{fileName}.gz
工作,但是当它解压缩时,它包含纯文件名,没有任何扩展名。我的文件是图像,所以我想要.png
或.jpg
例如。我该怎么做?到目前为止,我得到了这个:
文件存储在服务器上,具有唯一的名称,由shortid
. 在GET
具体url
找到我的产品数据库,获取名称,并将其设置为像这样的文件名:
res.setHeader("Content-Disposition", "attachment; filename=test.gz");
res.writeHead(200, {"Content-Type": `image/png`});
然后压缩:
let gzip = zlib.createGzip();
fs.createReadStream(filePath)
.pipe(gzip)
.pipe(res);
我的问题是 setHeader 只设置了原始文件的名称,也就是压缩.gz
文件。如何将要解压的文件名设置为“my-image.png”?
它看起来不zlib.Gzip
支持设置FNAME
( "original filename" ) 标志,这是您想要的。
即便如此,标准gunzip
工具通常也不会使用原始文件名;您必须明确告诉它使用它,因此即使可能,您的用户也可能不会使用正确的选项将其解压缩为其原始文件名(也许 ZIP 格式更合适,因为它是“真实的” " 存档格式,而 Gzip 或多或少是一种单文件压缩格式)。
最后,您必须想知道压缩 PNG 或 JPG 文件是否真的有意义,因为它们都已经是压缩文件格式。也许您可以将文件大小减少几个百分点,但仅此而已。
编辑:仔细检查您的问题后,我现在意识到,因为您已经拥有原始文件名,并且可以将其用作附件文件名的一部分,因此您可以将其后缀为.gz
.
说原来的名字是my-image.png
:
res.setHeader("Content-Disposition", "attachment; filename=my-image.png.gz");
解压缩后,这将产生my-image.png
您想要的结果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句