diff --git a/archetypes/helidon/src/main/archetype/se/custom/files/src/main/java/__pkg__/FileService.java.multipart.mustache b/archetypes/helidon/src/main/archetype/se/custom/files/src/main/java/__pkg__/FileService.java.multipart.mustache index c4cbcd21ed6..24798fa7ccf 100644 --- a/archetypes/helidon/src/main/archetype/se/custom/files/src/main/java/__pkg__/FileService.java.multipart.mustache +++ b/archetypes/helidon/src/main/archetype/se/custom/files/src/main/java/__pkg__/FileService.java.multipart.mustache @@ -7,6 +7,7 @@ import java.util.Map; import java.util.concurrent.ExecutorService; import io.helidon.common.configurable.ThreadPoolSupplier; +import io.helidon.common.http.BadRequestException; import io.helidon.common.http.ContentDisposition; import io.helidon.common.http.DataChunk; import io.helidon.common.http.Http; @@ -67,10 +68,13 @@ public final class FileService implements Service { private void upload(ServerRequest req, ServerResponse res) { req.content().asStream(ReadableBodyPart.class) .forEach(part -> { - if ("file[]".equals(part.name())) { - part.content().map(DataChunk::data) + if (part.isNamed("file[]")) { + String filename = part.filename() + .orElseThrow(() -> new BadRequestException("Missing filename")); + part.content() + .map(DataChunk::data) .flatMapIterable(Arrays::asList) - .to(IoMulti.writeToFile(storage.create(part.filename())) + .to(IoMulti.writeToFile(storage.create(filename)) .executor(executor) .build()); } else { diff --git a/examples/media/multipart/README.md b/examples/media/multipart/README.md index cbe0e9fb682..206a630c045 100644 --- a/examples/media/multipart/README.md +++ b/examples/media/multipart/README.md @@ -17,7 +17,7 @@ mvn package First, start the server: ``` -java -jar target/helidon-examples-microprofile-multipart.jar +java -jar target/helidon-examples-media-multipart.jar ``` Then open in your browser. diff --git a/examples/media/multipart/src/main/java/io/helidon/examples/media/multipart/FileService.java b/examples/media/multipart/src/main/java/io/helidon/examples/media/multipart/FileService.java index cc85a0fd113..b757d8b0741 100644 --- a/examples/media/multipart/src/main/java/io/helidon/examples/media/multipart/FileService.java +++ b/examples/media/multipart/src/main/java/io/helidon/examples/media/multipart/FileService.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2022 Oracle and/or its affiliates. + * Copyright (c) 2020, 2023 Oracle and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,6 +21,7 @@ import java.util.concurrent.ExecutorService; import io.helidon.common.configurable.ThreadPoolSupplier; +import io.helidon.common.http.BadRequestException; import io.helidon.common.http.ContentDisposition; import io.helidon.common.http.DataChunk; import io.helidon.common.http.Http; @@ -81,10 +82,13 @@ private void download(ServerRequest req, ServerResponse res) { private void upload(ServerRequest req, ServerResponse res) { req.content().asStream(ReadableBodyPart.class) .forEach(part -> { - if ("file[]".equals(part.name())) { - part.content().map(DataChunk::data) + if (part.isNamed("file[]")) { + String filename = part.filename() + .orElseThrow(() -> new BadRequestException("Missing filename")); + part.content() + .map(DataChunk::data) .flatMapIterable(Arrays::asList) - .to(IoMulti.writeToFile(storage.create(part.filename())) + .to(IoMulti.writeToFile(storage.create(filename)) .executor(executor) .build()); } else { diff --git a/reactive/media/multipart/pom.xml b/reactive/media/multipart/pom.xml index 37f6a7646d7..b82d4991339 100644 --- a/reactive/media/multipart/pom.xml +++ b/reactive/media/multipart/pom.xml @@ -1,6 +1,6 @@