我无法放置进度条,因为它直接重定向页面并下载文件.
这么多问题(大部分是隐含的)一个问题!
<块引用>使用struts2和Ajax下载文件时如何放置进度条
如果不需要,不要使用 AJAX 下载.当您在浏览器中打开文件 (contentDisposition: inline
) 时,只需使用新的 Tab(/Window).当您下载文件(contentDisposition: attachment
)时,当前页面不会受到影响.您可以在 结果:
<result name="success" type="stream"><param name="contentType">image/jpeg</param><param name="contentDisposition">附件;filename="document.pdf"</param><param name="contentLength">${lengthOfMyFile}</param></结果>
private long lengthOfMyFile;//使用 Getter公共字符串执行(){/* 文件加载和其他东西 ... */lengthOfMyFile = myFile.length();返回成功;}
<块引用>
假设文件太重.所以这需要时间,所以我想防止用户不点击其他按钮
如果您想节省带宽,那么您需要进行 Web 服务器 配置.这篇文章可能会有所帮助:
如果您不关心防止泛滥的请求,而只是防止客户端的多个并发下载,您可以使用会话变量,放在开头并在结尾删除方法,在下载操作开始时检查它是否存在.如果它存在,您将不会下载,否则,您将:
//Action 必须实现 SessionAware 接口私有地图<字符串,对象>会议;//使用 Setterprivate final static String BUSY = "我很忙.再试一次";公共字符串执行(){if (session.get(BUSY)!=null){LOG.debug("另一个下载正在进行中.我停在这里");返回无;}尝试 {session.put(忙,忙);/* 文件加载和其他东西 ... *