2

我有一个使用StreamResult流式传输文件的 Struts2 Action。该文件是一个可能非常大的报告。我想设置一个标志来限制用户一次下载一个。在我的操作中,我可以设置标志,但是当流完成时我没有地方可以取消它。

在使用 Struts 之前,我会设置标志,写入 Servlet 的 OutputStream,然后取消设置标志。但是对于 Struts,Action 只是将流设置为一个变量,然后 Action 就完成了。Struts(在 struts.xml 中设置)然后在我无法控制的地方进行发送。

4

2 回答 2

1

我认为您应该创建一个包含此下载操作的拦截器,它可以锁定/解锁当前用户的访问权限。有关详细信息,请参阅http://struts.apache.org/2.x/docs/interceptors.html

于 2012-11-09T23:12:20.750 回答
1

尝试close在类中覆盖函数FileInputStream,这是FileInputStream API的文档,如果您使用另一种“输入流”,您只需扩展它并覆盖该close方法。

试试这个代码:

public class YourInputStream extends FileInputStream {
    @Override
    public void close() throws IOException{
        super.close();
        // here unset your flag
    }
}

在你的行动课上:

inputStream = new YourInputStream(new File(path));
于 2012-11-09T23:33:26.587 回答