編集:このコードにはエラーはありませんでした。フロントエンドでのダウンロードに誤りがありました。サーバー上のzipは問題ありませんでしたが、js経由でダウンロードしても機能しませんでした。ZipOutputStreamでzipファイルにxmlファイルを書き込む - 開くときにエラーが発生する
私は2つのXMLファイルをzipファイルに書きます。結果のファイルを開くことができません(エラー:ファイルがなくフォルダもありません)。
タプルは、私のXMLコンテンツである2つの文字列(AとB)を含むクラスです。私は最初にcloseEntry
なしでこれを試して、setSize
なしで、結果は同じです。
アイデア?これをどのようにデバッグできますか?
private static byte[] createArchive(final Tuple<String, String> body) throws IOException {
try (final ByteArrayOutputStream bos = new ByteArrayOutputStream();
final ZipOutputStream zos = new ZipOutputStream(bos)) {
final ZipEntry firstEntry = new ZipEntry("first.xml");
firstEntry.setSize(body.getA().getBytes().length);
zos.putNextEntry(firstEntry);
zos.write(body.getA().getBytes());
zos.closeEntry();
final ZipEntry secondEntry = new ZipEntry("second.xml");
secondEntry.setSize(body.getB().getBytes().length);
zos.putNextEntry(secondEntry);
zos.write(body.getB().getBytes());
zos.closeEntry();
zos.close();
return bos.toByteArray();
}
}
ファイルに 'OutputStream'を書き込むコードはどこですか? – user2004685
他のものとは別に、エンコーディングを指定せずに 'String.getBytes()'を呼び出しています。しないでください - *常に*エンコーディングを指定してください。また、 'getBytes()'を複数回呼び出すこともあります.1回は長さを取得し、もう一度それらを書きます。私はエントリごとに一度呼び出すと、結果を 'byte []'に保存します。そのロジックをメソッド 'writeStringAsZipEntry'などに抽出したいかもしれません。 –
書き込みはApache Camelによって行われます。これは他のファイルでも使えるので、ここには含まれていません。最初にサイズを指定しなかったので、getBytes呼び出しは2回使用されます。それは必要なのでしょうか? –