This is an automated email from the ASF dual-hosted git repository. fmariani pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
commit 5d8f871be9aab8206c15c5115fb72bb916915c85 Author: Croway <[email protected]> AuthorDate: Wed Feb 5 15:01:57 2025 +0100 Add more headers in platform-http multipart uploads --- .../platform/http/vertx/VertxPlatformHttpConsumer.java | 5 ++++- .../platform/http/vertx/VertxPlatformHttpEngineTest.java | 10 ++++++++-- .../src/main/docs/platform-http-component.adoc | 5 ++++- .../java/org/apache/camel/ExchangeConstantProvider.java | 3 ++- core/camel-api/src/main/java/org/apache/camel/Exchange.java | 1 + 5 files changed, 19 insertions(+), 5 deletions(-) diff --git a/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpConsumer.java b/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpConsumer.java index e19aacb3a5b..11472ee6265 100644 --- a/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpConsumer.java +++ b/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpConsumer.java @@ -332,6 +332,7 @@ public class VertxPlatformHttpConsumer extends DefaultConsumer } protected void populateAttachments(List<FileUpload> uploads, Message message) { + message.setHeader(Exchange.ATTACHMENTS_SIZE, uploads.size()); for (FileUpload upload : uploads) { final String name = upload.name(); final String fileName = upload.fileName(); @@ -357,13 +358,15 @@ public class VertxPlatformHttpConsumer extends DefaultConsumer // populate body in case there is only one attachment if (uploads.size() == 1) { + message.setHeader(Exchange.FILE_PATH, localFile.getAbsolutePath()); + message.setHeader(Exchange.FILE_LENGTH, upload.size()); message.setHeader(Exchange.FILE_NAME, upload.fileName()); String ct = MimeTypeHelper.probeMimeType(upload.fileName()); if (ct == null) { ct = upload.contentType(); } if (ct != null) { - message.setHeader(Exchange.CONTENT_TYPE, ct); + message.setHeader(Exchange.FILE_CONTENT_TYPE, ct); } message.setBody(localFile); } diff --git a/components/camel-platform-http-vertx/src/test/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpEngineTest.java b/components/camel-platform-http-vertx/src/test/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpEngineTest.java index 44c11655dd9..1ec67a4bc51 100644 --- a/components/camel-platform-http-vertx/src/test/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpEngineTest.java +++ b/components/camel-platform-http-vertx/src/test/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpEngineTest.java @@ -430,7 +430,8 @@ public class VertxPlatformHttpEngineTest { } exchange.getIn().setHeader("ConcatFileContent", result); - }); + }) + .setHeader("UploadedAttachments", simple("${headers.CamelAttachmentsSize}")); } }); @@ -444,6 +445,7 @@ public class VertxPlatformHttpEngineTest { .then() .statusCode(204) .body(emptyOrNullString()) + .header("UploadedAttachments", is(String.valueOf(attachmentIds.size()))) .header("ConcatFileContent", is("Test multipart upload content myFirstTestFileTest multipart upload content mySecondTestFile")); } finally { @@ -476,7 +478,9 @@ public class VertxPlatformHttpEngineTest { AttachmentMessage message = exchange.getMessage(AttachmentMessage.class); DataHandler attachment = message.getAttachment(attachmentId); exchange.getMessage().setHeader("myDataHandler", attachment); - }); + }) + .setHeader("UploadedFileContentType", simple("${header.CamelFileContentType}")) + .setHeader("UploadedFileSize", simple("${header.CamelFileLength}")); } }); @@ -489,6 +493,8 @@ public class VertxPlatformHttpEngineTest { .then() .statusCode(200) .header("myDataHandler", containsString("jakarta.activation.DataHandler")) + .header("UploadedFileContentType", is("text/plain")) + .header("UploadedFileSize", is(String.valueOf(fileContent.getBytes().length))) .body(is(fileContent)); } finally { context.stop(); diff --git a/components/camel-platform-http/src/main/docs/platform-http-component.adoc b/components/camel-platform-http/src/main/docs/platform-http-component.adoc index 16ebe481df5..96c236cfea9 100644 --- a/components/camel-platform-http/src/main/docs/platform-http-component.adoc +++ b/components/camel-platform-http/src/main/docs/platform-http-component.adoc @@ -91,6 +91,9 @@ Since Apache Camel 4.10, multipart file uploads are easier and harmonized across * The Apache Camel message contains: ** The uploaded file in the message body ** The file name in the "CamelFileName" message header -** The file's content type in the "Content-Type" message header +** The file's content type in the "CamelFileContentType" message header +** The file's size in the "CamelFileLength" message header + +In case of multiple uploads, the header "CamelAttachmentsSize" contains the number of files uploaded. include::spring-boot:partial$starter.adoc[] \ No newline at end of file diff --git a/core/camel-api/src/generated/java/org/apache/camel/ExchangeConstantProvider.java b/core/camel-api/src/generated/java/org/apache/camel/ExchangeConstantProvider.java index 498abea265f..7a078488846 100644 --- a/core/camel-api/src/generated/java/org/apache/camel/ExchangeConstantProvider.java +++ b/core/camel-api/src/generated/java/org/apache/camel/ExchangeConstantProvider.java @@ -13,7 +13,7 @@ public class ExchangeConstantProvider { private static final Map<String, String> MAP; static { - Map<String, String> map = new HashMap<>(160); + Map<String, String> map = new HashMap<>(161); map.put("ACCEPT_CONTENT_TYPE", "CamelAcceptContentType"); map.put("AGGREGATED_COLLECTION_GUARD", "CamelAggregatedCollectionGuard"); map.put("AGGREGATED_COMPLETED_BY", "CamelAggregatedCompletedBy"); @@ -25,6 +25,7 @@ public class ExchangeConstantProvider { map.put("AGGREGATION_COMPLETE_CURRENT_GROUP", "CamelAggregationCompleteCurrentGroup"); map.put("AGGREGATION_STRATEGY", "CamelAggregationStrategy"); map.put("ASYNC_WAIT", "CamelAsyncWait"); + map.put("ATTACHMENTS_SIZE", "CamelAttachmentsSize"); map.put("AUTHENTICATION", "CamelAuthentication"); map.put("AUTHENTICATION_FAILURE_POLICY_ID", "CamelAuthenticationFailurePolicyId"); map.put("BATCH_COMPLETE", "CamelBatchComplete"); diff --git a/core/camel-api/src/main/java/org/apache/camel/Exchange.java b/core/camel-api/src/main/java/org/apache/camel/Exchange.java index d794a2ab1a4..6f07c90cfd8 100644 --- a/core/camel-api/src/main/java/org/apache/camel/Exchange.java +++ b/core/camel-api/src/main/java/org/apache/camel/Exchange.java @@ -117,6 +117,7 @@ public interface Exchange extends VariableAware { String CONTENT_TYPE = "Content-Type"; String COOKIE_HANDLER = "CamelCookieHandler"; String CORRELATION_ID = "CamelCorrelationId"; + String ATTACHMENTS_SIZE = "CamelAttachmentsSize"; // The schema of the message payload String CONTENT_SCHEMA = "CamelContentSchema";
