日期:2014-05-20  浏览次数:20822 次

怎样下载zip文件???????????????
我想用poi动态生成多个ppt文件,然后打包生成zip文件并下载。
但是我不想把生成的ppt文件保存到磁盘,然后再打包。而是直接在内存中生成文件流,然后打包,怎样做啊????


------解决方案--------------------
探讨
我想用poi动态生成多个ppt文件,然后打包生成zip文件并下载。
但是我不想把生成的ppt文件保存到磁盘,然后再打包。而是直接在内存中生成文件流,然后打包,怎样做啊????

------解决方案--------------------
探讨
那就只能先保存在服务器,然后打包了再传个客户端??这样比内存操作要慢嘢。。

------解决方案--------------------
学习下。。。
------解决方案--------------------
Java code

protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String sufix = request.getParameter("s");
        String path = request.getParameter("p") + "." + sufix;
        try {
            String fileName = request.getParameter("f").trim();
            int c = fileName.lastIndexOf(".");
            String name = fileName.substring(0, c > 0 ? c : fileName.length())
                    + "." + sufix;
            response.setContentType("application/octet-stream");
            response.setHeader("Content-Disposition", "attachement;filename="
                    + new String(name.getBytes("GBK"), "ISO-8859-1"));
            File file = new File(Const.getCurrentUtterlyPath() + path);
            if (!file.exists()) {
                throw new IOException(fileName + ",所下载的文件不存在!");
            }
            response.setContentLength(Integer.parseInt(file.length() + ""));
            InputStream fs = new FileInputStream(file);
            OutputStream os = response.getOutputStream();
            byte[] buff = new byte[1024];
            int readCount = 0;
            while ((readCount = fs.read(buff)) != -1) {
                os.write(buff, 0, readCount);
            }
            if (fs != null) {
                fs.close();
            }
            if (os != null) {
                os.close();
            }
        } catch (IOException e) {
            LOG.error("error: " + e.getMessage() + ",path: " + path);
            throw e;
        }
        response.setStatus(response.SC_OK);
        response.flushBuffer();
    }

------解决方案--------------------
先保存,再打包,最后扔给客户端,这是比较安全的做法。如果都在内存中操作,程序挂掉的可能行很高。