0

当我从我的 Struts2 应用程序下载文件时,会话在下载文件后过期。这不应该发生。

我们可以使用 setMaxInactiveInterval() 设置会话超时,但文件大小不是恒定的,下载时间取决于文件大小等。

你能提供任何解决方案吗?

我的文件下载代码如下。

InputStream fileInputStream = null;
    File file = null;
    String fileDir = "C:\\CAP\\FileDownload\\file\\";
    String fileName = "SW.zip";
    HttpSession sessio = null;

    try {
        sessio = request.getSession();
        logger.debug("--------------->>>>"+sessio.getMaxInactiveInterval());
        file = new File(fileDir+fileName);
        logger.debug(":::::::::-->"+file.isFile());
        fileInputStream = new FileInputStream(file);

        ServletOutputStream outputStream = null;
        response.addHeader("Content-Disposition", "attachment; filename="
          + fileName);
        response.setContentLength((int) file.length());
        outputStream = response.getOutputStream();

        // Copy the contents of the file to the output stream
        byte[] buf = new byte[1024];
        int count = 0;
        while ((count = fileInputStream.read(buf)) >= 0) {
            outputStream.write(buf, 0, count);
            logger.debug("Count Is : "+count);
        }

        logger.debug("====================compleated the file donlowding ====================");
    } catch (IOException e) {
        logger.error("ERROR while reading and wring file : "
                + e.getMessage());

    }
4

2 回答 2

0

尝试使用request.getSession(false)as request.getSession()返回与此请求关联的当前会话,或者如果请求没有会话,则创建一个。

所以,在你的情况下,我相信request.getSession()创建一个新session的,一旦下载完成就会被销毁。

于 2013-02-21T08:20:18.087 回答
0

如果文件大小足够大并且时间会超出您的会话超时时间,那么最好使用 ASynchrise 服务,它可以并排下载文件,用户可以继续他的工作。像批处理这样的东西。

于 2013-02-21T08:24:15.257 回答