在我的web服务器所在的网络上,有一台机器有许多压缩的pdf文件(用java.util.zip压缩),我可以通过超文本传输协议访问这些文件。当用户想要下载pdf文件时,我知道如何首先在服务器上本地解压缩该文件,然后通过servlet将解压缩后的pdf提供给用户。有没有可能在不先在本地解压的情况下将解压缩后的文件传递给用户?
问候
发布于 2011-04-11 12:45:20
原则上,如果客户在他的请求中说他接受gzip压缩的数据,你可以以压缩的形式发送PDF文件,客户端解压缩它。然而,有一个问题:虽然压缩文件的压缩算法和HTTP Content-Encoding: gzip
是相同的,但压缩文件格式有更多的东西(因为它可以包含多个文件和一个目录结构),所以有必要在此之前去掉这些东西。我不确定这是否比在servlet中解压,然后让Servlet引擎负责再次压缩要容易得多,但请尝试一下。
发布于 2011-04-11 12:41:22
您可以将响应发送到以压缩格式编码的请求。如果客户端使用标头执行请求
Accept-Encoding: gzip, deflate
例如,您可以为他提供使用gzip压缩的内容(只要您通过标题声明:)
Content-Encoding: gzip
发布于 2011-04-11 12:45:41
是否可以在不先在本地解压的情况下将解压缩后的文件传递给用户?
这有点取决于你所说的“本地”到底是什么意思,通常的答案是“不”。要传送解压缩后的内容,必须先解压缩。
如果您的实际意思是zip文件位于某个非本地计算机上,并且您当前需要先在本地保存和压缩它,然后再流式传输解压缩的内容,那么答案将是“是”,可以在不本地保存文件的情况下解压缩和流式传输它。只需传递/修饰流,而不使用FileInputStream
/FileOutputStream
。
https://stackoverflow.com/questions/5621157
复制