我的代码从后端服务器下载文件。由于我们将检索数以百万计的记录,因此我们使用了 Struts2execAndWait
拦截器。为了测试这一点,我们插入了 30 秒的延迟。我能够在不插入延迟的情况下下载文件(测试数据非常小),但插入后,我再也没有得到文件。日志显示,由于等待文件中的 5 秒,动作类被重复执行<meta-refresh>
,即使输入流被填充。
这种行为的原因可能是什么?
代码设置:
Struts.xml:
<action name="file-download" class="com.company.namespace.test.TestDownloadActionClass">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="execAndWait">
<param name="delay">10000</param>
<param name="delaySleepInterval">500</param>
</interceptor-ref>
<result name="wait" type="freemarker" >/dir/resources/First-Page.ftl</result>
<result name="error" type="freemarker" >/dir/resources/Error-Page.ftl</result>
<result name="success" type="stream">
<param name="contentDisposition">attachment; filename="${downloadFilename}"</param>
<param name="contentType">application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</param>
<param name="inputName">inputStream</param>
<param name="bufferSize">1024</param>
</result>
</action>
PS:我还没有在百万数据集上测试过这段代码。测试数据仅包含少量数据。