我想讓客戶端在特定的URL下載gzip
壓縮文件。我幾乎可以工作 - 下載{fileName}.gz
作品,但是當它解壓時,它包含純文件名,沒有任何擴展名。我的文件是圖像,所以我想要.png
或.jpg
例如。我應該怎麼做?到目前爲止,我得到了這個:gzip壓縮中的Node.js文件擴展
文件存儲在服務器上,具有唯一的名稱,由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
文件。如何設置文件名被解壓到「我的-image.png`?
最初我將它標記爲已接受,但是當我考慮它時 - 我不確定。如果它不是圖像文件,但是「.txt」會怎麼樣?你是否告訴我在Node.js解壓縮後不能設置默認文件名? – Alex
@Alex也許有一個模塊可以實現Gzip並允許你設置原始文件名(不像內置的'zlib.Gzip'),但正如我所說的那樣,如果實際使用該名稱,它完全依賴於_decompression_軟件(根據Gzip標準,這不是強制性的)。 macOS Finder不會恢復到原來的文件名,'gunzip'(CLI工具)也不會(除非明確告訴它應該)。 – robertklep
@亞馬遜嗯傻問題,但現在我重新讀你的問題,我想知道我是不是讓事情比他們更難。你有文件的原始名稱(例如'my-image.png')嗎?如果是這樣,你不能將'my-image.png.gz'設置爲附件文件名嗎?如果該文件被解壓縮,它應該保存爲'my-image.png',這正是我想要的。 – robertklep