通过servlet提供解压缩文件而不首先在服务器上解压缩

时间:2011-04-11 12:20:06

标签: java http servlets compression zip

在我拥有我的Web服务器的网络上,有一台机器有许多压缩的pdf文件(使用java.util.zip压缩),我可以通过HTTP访问这些文件。当用户想要下载pdf文件时,我知道如何首先在服务器上本地解压缩文件,然后通过servlet将解压缩的pdf传递给用户。是否可以将解压缩的文件交付给用户而无需先在本地解压缩?

此致

3 个答案:

答案 0 :(得分:1)

您可以将响应发送到以压缩格式编码的请求。如果客户端使用标题

执行请求
Accept-Encoding: gzip, deflate

你可以为他提供使用gzip压缩的内容(只要你通过标题声明这一点:)

Content-Encoding: gzip

来源:Wikipedia: HTTP Compression

答案 1 :(得分:1)

原则上,如果客户在他的请求中说他接受gzip压缩数据,你可以以压缩形式发送PDF文件,客户端将解压缩它。但是有一个问题:虽然zip文件和HTTP Content-Encoding: gzip的压缩算法是相同的,但Zip文件格式还有更多的东西(因为它可以包含多个文件和目录结构),所以有必要在之前剥掉这些东西。我不确定这比在servlet中解压缩要容易得多,然后让你的Servlet引擎再次处理压缩,但是试试吧。

答案 2 :(得分:1)

  

是否可以将解压缩的文件交付给用户而无需先在本地解压缩?

这取决于你对“本地”的确切含义,一般答案是“不”。要提供解压缩的内容,您必须先解压缩zip。

如果实际上意味着zip文件位于某个非本地计算机上,并且您当前需要在流式解压缩内容之前先将其保存并在本地压缩,那么答案将是“是” “,可以解压缩并流式传输,而无需在本地保存文件。只需传递/装饰流,而无需使用FileInputStream / FileOutputStream