3

問題のないいくつかのファイルを含む zip ファイル (sample.zip) を作成しました。sample.zip を開くと、期待どおりのファイルが含まれています。

そのzipファイルをhttp応答に入れたいです。現在、私は以下を使用しています:

        response.setContentType("application/zip");
        response.addHeader("Content-Disposition", "attachment; filename="+"sampleZip.zip");
        response.setContentLength(2048);
        response.setHeader("Set-Cookie", "fileDownload=true; path=/");
        FileInputStream fileInputStream = new FileInputStream("sample.zip");
        OutputStream responseOutputStream = response.getOutputStream();
        int bytes;
        while ((bytes = fileInputStream.read()) != -1) {
            responseOutputStream.write(bytes);
        }
        response.flushBuffer();

これで、ブラウザのデフォルトのダウンロード場所に zip ファイルがダウンロードされます。しかし、そのzipファイルを開くと、

ファイルを開けません: 有効なアーカイブではないようです

これを修正するのを手伝ってください。

4

1 に答える 1

3

このコードは私には良さそうです。しかし、問題になる可能性のあるデフォルトのコンテンツの長さを設定しています。File インスタンスを作成し、file.length() メソッドを使用してコンテンツの長さを設定し、入力ストリームに同じファイルを使用します。また、バイトごとに読み取ることはお勧めできません。可能であれば、apache の IOUtils.copy() を使用して、入力ストリームから ServletOutputStream にデータをコピーします。

于 2013-07-05T15:56:50.213 に答える