DÜZENLEME: hata, hata Bu kodda değildi. Ön uçtaki indirme hatalıydı. Sunucuda zip iyiydi ama js ile indirme işe yaramadı.ZipOutputStream ile zip dosyasına xml dosyaları yazma -
Bir zip dosyasına iki adet xml dosyası yazıyorum. Ortaya çıkan dosyayı açamıyorum (hata: dosya yok ve klasör yok).
Tuple, iki Strings (A ve B), xml içeriğim içeren bir sınıftır. Bunu ilk olarak closeEntry
olmadan ve setSize
olmadan denedim, sonuç aynı.
Herhangi bir fikrin var mı? Bunu nasıl ayıklayabilirim?
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" öğenizi Dosyaya yazma kodu nerede? – user2004685
Başka bir şeyden başka, kodlamayı belirtmeden 'String.getBytes()' diyorsunuz. Bunu yapma - * her zaman * kodlamayı belirtin. Ayrıca, bir defada getBytes() işlevini çağırıyorsunuz - bir kez uzunluğunu almak için, ve sonra tekrar yazmak için. Giriş başına bir kez çağırırdım, sonucu bir bayt [] 'a kaydederdim. Bu mantığı bir yöntemle yazmak isteyebilirsiniz, 'writeStringAsZipEntry' ya da benzer bir şey ... –
Yazma, Apache Camel tarafından yapılır. Bu diğer dosyalarla çalışır, bu yüzden buraya dahil değildir. GetBytes çağrısı hala iki kez kullanılır çünkü ilk önce boyutunu belirtmedim. Bu gerekli mi? –