2

zipファイルを作成して返すサーブレットがありますこのようなもの

 response.setHeader("Pragma","Public");
            response.setHeader("Cache-Control","must-revalidate,post-check=0,pre-check=0");

            response.setContentType("application/octet-stream");

            response.setHeader("Expires", "0");
            response.setHeader("Content-Transfer-Encoding", "binary");
            if(file.getName().contains("–")){
                response.setHeader("Content-Disposition", "inline; filename=\"file.zip\"");
            }

            OutputStream os = response.getOutputStream();
            ZipOutputStream zos = new ZipOutputStream(os);
            for (File f : files) {
                //add files, it's working...
                }
                bis.close();
                fis.close();
                zos.closeEntry();
            }
            zos.flush();
            zos.close();
            os.flush();
            os.close();

現在ダウンロードするにはiframeを使用しているので、src属性を設定してダウンロードを開始します。この関数を呼び出すと、ダウンロードフレームが読み込まれます

function loadIDownloadFrame(url) {
    document.getElementById("idownloadFrame").src=url;
}

しかし今、私は現在のページを離れずにzipファイルを返した後にメッセージを表示する必要があります。サーブレットがzipファイルを返したかどうかを知る必要があります。

「window.frames['idownloadFrame']。document.readyState」でiframeステータスを取得しようとしましたが、常にステータスは「complete」です。

誰かが解決策を持っていますか?

4

1 に答える 1

1

マップされたサーブレット(ダウンロード可能なバイナリを返す)へのダウンロードリンクを直接参照できると思います。マップされたサーブレットに適切なヘッダーを設定してバイナリを返す場合、ページは変更されません。コードスニペットからは、すでにそれを行っているように見えます。別のiframeにファイルをダウンロードする必要があるのはなぜですか?必ずしも必要ではありません。

メッセージはどこに表示する必要がありますか?JavaScriptアラートか何かのように?

于 2012-11-26T13:23:33.320 に答える