当我从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());
}
答案 0 :(得分:0)
尝试使用request.getSession(false)
作为
request.getSession()
返回与此请求关联的当前会话,或者如果请求没有会话,则创建一个会话。
因此,在您的情况下,我相信request.getSession()
正在创建一个新的session
,一旦下载完成就会被销毁。
答案 1 :(得分:0)
如果文件大小足够大且时间超出会话超时时间,那么最好是用户并行下载文件的ASynchronise服务,用户可以继续他的工作。像Batch这样的东西。