diff --git a/src/main/java/com/dostalgia/UploadResource.java b/src/main/java/com/dostalgia/UploadResource.java index 1e5c8c9..b1d569b 100644 --- a/src/main/java/com/dostalgia/UploadResource.java +++ b/src/main/java/com/dostalgia/UploadResource.java @@ -293,15 +293,16 @@ public class UploadResource { Files.walk(extractDir).filter(Files::isRegularFile).forEach(f -> { try { String entryName = extractDir.relativize(f).toString().replace('\\', '/'); - // Ensure all parent directories have explicit entries - // (js-dos Emscripten FS requires explicit directory entries) + // Ensure ALL ancestor directories have explicit entries + // (Emscripten FS requires every directory in the chain) int idx = entryName.lastIndexOf('/'); - if (idx >= 0) { + while (idx >= 0) { String parent = entryName.substring(0, idx + 1); if (addedDirs.add(parent)) { zos.putNextEntry(new java.util.zip.ZipEntry(parent)); zos.closeEntry(); } + idx = entryName.lastIndexOf('/', idx - 1); } zos.putNextEntry(new java.util.zip.ZipEntry(entryName)); Files.copy(f, zos);