zip 出力ストリームを生成するコードがあり、サーブレットの応答ストリームを介してそのストリームを送信します。Mac で開発中のテストではすべて正常に動作しますが、サーバー (RHEL) にコードを配置すると、zip アーカイブが破損しているように見えます。jar を使用してファイルの内容を一覧表示しようとすると、次のようになります。
java.util.zip.ZipException: zip ファイルを開く際のエラー
しかし奇妙なことに、jar を使用してアーカイブを抽出すると機能します (ただし、他の unarchiver は失敗します)。
さらにテストするために、zip ファイルの内容が私の Mac と RHEL からのものとまったく同じであることを確認しました。どちらの場合も、zip ファイルのサイズはまったく同じでしたが、ハッシュ (MD5) が異なっていました。
前述したように、zip ファイルを生成するコードと内容はまったく同じであるため、何が起こっているのかわかりません。プラットフォームの 1 つで動作しているため、zip ファイルの作成は正しいと確信しています。RHEL サーバーで zip ファイルを生成する際に問題が発生する兆候はありません。
考え?助けてくれてありがとう。
編集:これがコードです...
// first add the kml document
ZipOutputStream stream = new ZipOutputStream(response.getOutputStream());
stream.putNextEntry(new ZipEntry("doc.kml"));
stream.write(kml.getBytes(), 0, kml.length());
stream.closeEntry();
File image = null;
byte[] bytes = null;
FileInputStream fstream = null;
// include the images for each type
File images = new File("/tmp/images");
String filename = null;
for(Type type: types) {
filename = type.getName() + ".png";
image = new File(images, filename);
bytes = new byte[(int)image.length()];
fstream = new FileInputStream(image);
fstream.read(bytes);
stream.putNextEntry(new ZipEntry(filename));
stream.write(bytes);
stream.closeEntry();
fstream.close();
}
stream.finish();
stream.flush();
stream.close();
EDIT2: プロットが厚くなります。アーカイブにイメージが 1 つしかない限り、RHEL zip ストリームは問題ないようです。うまくいけば、Googleが私を助けるのにこれで十分です。