diff --git a/src/main/java/com/dostalgia/UploadResource.java b/src/main/java/com/dostalgia/UploadResource.java index a66647a..1e5c8c9 100644 --- a/src/main/java/com/dostalgia/UploadResource.java +++ b/src/main/java/com/dostalgia/UploadResource.java @@ -289,9 +289,20 @@ public class UploadResource { // ZIP it up directly from extractDir (no temp copy) try (var zos = new java.util.zip.ZipOutputStream(Files.newOutputStream(bundlePath))) { + var addedDirs = new java.util.HashSet(); 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) + int idx = entryName.lastIndexOf('/'); + if (idx >= 0) { + String parent = entryName.substring(0, idx + 1); + if (addedDirs.add(parent)) { + zos.putNextEntry(new java.util.zip.ZipEntry(parent)); + zos.closeEntry(); + } + } zos.putNextEntry(new java.util.zip.ZipEntry(entryName)); Files.copy(f, zos); zos.closeEntry();