本人在做一个系统,使用Struts2.1.8+Spring2.5+hibernate3.2。
系统需要的一个功能是:从数据库里搜索出一个文件列表(文件使用一个对象封装,文件名称与数据都保存在Oracle中),然后必须打包成gz包,然后将这个gz包的InputStream返回给Struts2,就可以提供下载功能了。
本人借助服务器的文件系统的确是可以实现这个功能,做法就是将文件从数据库中取出,一个一个保存在本地,然后将它们一个一个打到gz包里,然后再读取这个gz包返回它的流给Struts2。
问题是上面的这种方法需要多次的文件读写,效率可想而知,数据量很大的时候文件系统的维护也是个问题。我的想法是直接从数据库中获取文件列表中的数据读取流,直接将这些数据流打包成gz流,最后需要将这个流转化为InputStream直接返回给Struts2。
这样就解决了效率与维护的问题。但本人还是菜鸟,不知道怎样实现,期待高手的帮助,谢谢!
(本人还只能发表30分的帖子,不知何原因,是在抱歉!)

解决方案 »

  1.   

    # public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { 
    #  OutputStream out = new GZIPOutputStream(res.getOutputStream()); 
    #  res.setHeader("Content-Encoding", "gzip");  
    # ...
    #  out.close();  
    # }  
      

  2.   

    楼上大哥请问系OutputStream out = new GZIPOutputStream(res.getOutputStream())这个输出流是输出给访问这个Servlet的请求端吗,还有你这个打包能否解决多个文件打包压缩呢?