3 回答

TA貢獻(xiàn)1735條經(jīng)驗(yàn) 獲得超5個(gè)贊
如果范圍是寫入內(nèi)存,您將使用ByteArrayOutputStream 。本質(zhì)上,zip 文件將完全包含在內(nèi)存中,因此請(qǐng)確保您不會(huì)冒一次有太多請(qǐng)求的風(fēng)險(xiǎn),并且文件大小是合理的!否則這種方法會(huì)嚴(yán)重適得其反!

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊
您可以使用以下代碼段:
public static byte[] zip(final String str) throws IOException {
if (StringUtils.isEmpty(str)) {
throw new IllegalArgumentException("Cannot zip null or empty string");
}
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try (GZIPOutputStream gos = new GZIPOutputStream(bos)) {
gos.write(str.getBytes(StandardCharsets.UTF_8));
}
return bos.toByteArray();
}
但是正如另一個(gè)答案中所述,請(qǐng)確保您不會(huì)通過(guò)將所有內(nèi)容加載到您的 Java 內(nèi)存中來(lái)冒太大的風(fēng)險(xiǎn)。

TA貢獻(xiàn)1850條經(jīng)驗(yàn) 獲得超11個(gè)贊
這種方法的唯一缺點(diǎn)是:客戶端將無(wú)法顯示下載狀態(tài)欄,因?yàn)榉?wù)器將無(wú)法發(fā)送“Content-length”標(biāo)頭。這是因?yàn)?ZIP 文件的大小只有在生成后才能知道,而服務(wù)器需要先發(fā)送文件頭。所以 - 沒有臨時(shí) zip 文件 - 事先沒有文件大小。
您還在談?wù)撟幽夸?。這只是處理 ZIP 流時(shí)的命名問題。每個(gè) zip 項(xiàng)目都需要這樣命名:“directory/directory2/file.txt”。這將在解壓縮時(shí)產(chǎn)生子目錄。
添加回答
舉報(bào)