This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch camel-3.18.x in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-3.18.x by this push: new 073661b665d [CAMEL-18722] Fixed metadata handling 073661b665d is described below commit 073661b665dd9c387d0a28c9ced01cf6a6418b55 Author: Henrik Karlsson <henrik.karls...@redpill-linpro.com> AuthorDate: Mon Nov 14 21:38:54 2022 +0100 [CAMEL-18722] Fixed metadata handling --- .../camel/component/aws2/s3/AWS2S3Producer.java | 83 +++++++++++----------- 1 file changed, 42 insertions(+), 41 deletions(-) diff --git a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Producer.java b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Producer.java index dcc59ee63dc..bccea839205 100644 --- a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Producer.java +++ b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Producer.java @@ -141,13 +141,12 @@ public class AWS2S3Producer extends DefaultProducer { } Map<String, String> objectMetadata = determineMetadata(exchange); - if (objectMetadata.containsKey("Content-Length")) { - if (objectMetadata.get("Content-Length").equalsIgnoreCase("0")) { - objectMetadata.put("Content-Length", String.valueOf(filePayload.length())); - } - } else { - objectMetadata.put("Content-Length", String.valueOf(filePayload.length())); + + Long contentLength = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_LENGTH, Long.class); + if (contentLength == null || contentLength == 0) { + contentLength = filePayload.length(); } + objectMetadata.put("Content-Length", contentLength.toString()); final String keyName = AWS2S3Utils.determineKey(exchange, getConfiguration()); CreateMultipartUploadRequest.Builder createMultipartUploadRequest @@ -177,13 +176,28 @@ public class AWS2S3Producer extends DefaultProducer { createMultipartUploadRequest.contentType(contentType); } + String cacheControl = exchange.getIn().getHeader(AWS2S3Constants.CACHE_CONTROL, String.class); + if (cacheControl != null) { + createMultipartUploadRequest.cacheControl(cacheControl); + } + + String contentDisposition = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_DISPOSITION, String.class); + if (contentDisposition != null) { + createMultipartUploadRequest.contentDisposition(contentDisposition); + } + + String contentEncoding = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_ENCODING, String.class); + if (contentEncoding != null) { + createMultipartUploadRequest.contentEncoding(contentEncoding); + } + AWS2S3Utils.setEncryption(createMultipartUploadRequest, getConfiguration()); LOG.trace("Initiating multipart upload [{}] from exchange [{}]...", createMultipartUploadRequest, exchange); CreateMultipartUploadResponse initResponse = getEndpoint().getS3Client().createMultipartUpload(createMultipartUploadRequest.build()); - final long contentLength = Long.parseLong(objectMetadata.get("Content-Length")); + //final long contentLength = Long.parseLong(objectMetadata.get("Content-Length")); List<CompletedPart> completedParts = new ArrayList<CompletedPart>(); long partSize = getConfiguration().getPartSize(); CompleteMultipartUploadResponse uploadResult = null; @@ -245,7 +259,7 @@ public class AWS2S3Producer extends DefaultProducer { Map<String, String> objectMetadata = determineMetadata(exchange); // the content-length may already be known - long contentLength = Long.parseLong(objectMetadata.getOrDefault(Exchange.CONTENT_LENGTH, "-1")); + long contentLength = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_LENGTH, -1, Long.class); Object obj = exchange.getIn().getMandatoryBody(); InputStream inputStream = null; @@ -277,9 +291,7 @@ public class AWS2S3Producer extends DefaultProducer { } } } - if (contentLength > 0) { - objectMetadata.put(Exchange.CONTENT_LENGTH, String.valueOf(contentLength)); - } + doPutObject(exchange, putObjectRequest, objectMetadata, filePayload, inputStream, contentLength); } finally { IOHelper.close(inputStream); @@ -313,6 +325,25 @@ public class AWS2S3Producer extends DefaultProducer { putObjectRequest.contentType(contentType); } + String cacheControl = exchange.getIn().getHeader(AWS2S3Constants.CACHE_CONTROL, String.class); + if (cacheControl != null) { + putObjectRequest.cacheControl(cacheControl); + } + + String contentDisposition = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_DISPOSITION, String.class); + if (contentDisposition != null) { + putObjectRequest.contentDisposition(contentDisposition); + } + + String contentEncoding = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_ENCODING, String.class); + if (contentEncoding != null) { + putObjectRequest.contentEncoding(contentEncoding); + } + + if (contentLength > 0) { + putObjectRequest.contentLength(contentLength); + } + BucketCannedACL acl = exchange.getIn().getHeader(AWS2S3Constants.ACL, BucketCannedACL.class); if (acl != null) { // note: if cannedacl and acl are both specified the last one will @@ -610,36 +641,6 @@ public class AWS2S3Producer extends DefaultProducer { private Map<String, String> determineMetadata(final Exchange exchange) { Map<String, String> objectMetadata = new HashMap<String, String>(); - Long contentLength = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_LENGTH, Long.class); - if (contentLength != null) { - objectMetadata.put(Exchange.CONTENT_LENGTH, String.valueOf(contentLength)); - } - - String contentType = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_TYPE, String.class); - if (contentType != null) { - objectMetadata.put("Content-Type", contentType); - } - - String cacheControl = exchange.getIn().getHeader(AWS2S3Constants.CACHE_CONTROL, String.class); - if (cacheControl != null) { - objectMetadata.put("Cache-Control", cacheControl); - } - - String contentDisposition = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_DISPOSITION, String.class); - if (contentDisposition != null) { - objectMetadata.put("Content-Disposition", contentDisposition); - } - - String contentEncoding = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_ENCODING, String.class); - if (contentEncoding != null) { - objectMetadata.put("Content-Encoding", contentEncoding); - } - - String contentMD5 = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_MD5, String.class); - if (contentMD5 != null) { - objectMetadata.put("Content-Md5", contentMD5); - } - Map<String, String> metadata = exchange.getIn().getHeader(AWS2S3Constants.METADATA, Map.class); if (metadata != null) { objectMetadata.putAll(metadata);