2011-12-08 30 views
4

バイナリデータのグループ(データベースから返された結果セット)を1つのファイルに圧縮しようとしています。ウェブアプリケーションからダウンロードできます。Javaでバイナリデータを圧縮する

ファイルパス:次のコードは、WinRarのを使ってダウンロードしたzipファイルを解凍中に問題が、私はエラー以下を取得していることをHttpServletResponse

String outFilename = "outfile.zip"; 
response.setContentType("application/octet-stream"); 
response.setHeader("Content-Disposition", "attachment; filename= " + outFilename); 
OutputStream os = response.getOutputStream(); 
ZipOutputStream out = new ZipOutputStream(os); 
for (int i = 0; i < cardFileList.size(); i++) { 

    CardFile cardFile = cardFileList.get(i); 
    out.putNextEntry(new ZipEntry(cardFile.getBinaryFileName())); 
    out.write(cardFile.getBinaryFile(), 0, cardFile.getBinaryFile().length); 
    out.closeEntry(); 
} 
// Complete the ZIP file 
out.flush(); 
out.close(); 
os.close(); 

にzipファイルを結果セットを圧縮して書き込むために使用されますかマルチパートまたは破損したZIPアーカイブ

誰かが間違っていると指摘できますか?どんな助けもありがとう。

[編集]私はresponse.setContentType("application/zip");を試しましたが、同じ結果です。

答えて

1

次のコードは、私の作品:このコードで生成された

FileOutputStream os = new FileOutputStream("out.zip"); 
ZipOutputStream zos = new ZipOutputStream(os); 
try 
{ 
    for (int i = 1; i <= 5; i++) 
    { 
     ZipEntry curEntry = new ZipEntry("file" + i + ".txt"); 
     zos.putNextEntry(curEntry); 
     zos.write(("Good morning " + i).getBytes("UTF-8")); 
    } 
} 
finally 
{ 
    zos.close(); 
} 

Zipファイルを問題なく7-ZIPを開きます。

  • サーブレットからの応答が実際に404または500エラーページでないことを確認します。小さいレスポンスを選び、16進エディタやテキストエディタで開きます。 Zipファイルはテキストエディタでも表示されるべき「PK」マジックナンバーで始まります。
  • まず、サーブレットの出力ストリームの代わりにファイルに保存し、それが違いを生むかどうかを確認してください。
  • サーブレットの出力を変更するフィルタがありますか、ZIPが壊れていますか?
0

ファイルを生成するためのコードが正しいように見えます。だから問題はおそらくあなたのダウンロードにあります。

  1. ダウンロードしたファイルをご覧ください。サイズは何ですか?
  2. あなたのWinRar以外のツールを試して、自分が持っているものを見てください。 7Zipはまともです。
関連する問題