2

StreamResultを使用してファイルをストリーミングする Struts2 アクションがあります。このファイルは、非常に大きくなる可能性があるレポートです。ユーザーを一度に 1 つのダウンロードに制限するフラグを設定したいと考えています。私のアクションでは、フラグを設定できますが、ストリームが終了したときに設定を解除する場所がありません。

Struts の前は、フラグを設定し、サーブレットの OutputStream に書き込み、フラグの設定を解除していました。しかし、Struts では、Action はストリームを変数に設定するだけで、Action は終了します。Struts (struts.xml で設定) は、制御できない場所で送信を行います。

4

2 に答える 2

1

closeclassでオーバーライド機能を試してください。ここにFileInputStream APIFileInputStreamのドキュメントがあります。別の種類の「入力ストリーム」を使用している場合は、それを拡張してメソッドをオーバーライドするだけです。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 に答える
1

このダウンロード アクションをラップするインターセプターを作成する必要があると思います。これにより、現在のユーザーのアクセスをロック/ロック解除できます。詳細については、 http://struts.apache.org/2.x/docs/interceptors.htmlを参照してください。

于 2012-11-09T23:12:20.750 に答える