From 24adec82353fc5fee6cb46ee0fe6cee9256af946 Mon Sep 17 00:00:00 2001 From: Igor Dianov Date: Sat, 26 Nov 2022 08:39:04 -0800 Subject: [PATCH 1/4] fix: use resource content length to set content length property --- .../rest/contentservice/ContentStoreContentService.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/spring-content-rest/src/main/java/internal/org/springframework/content/rest/contentservice/ContentStoreContentService.java b/spring-content-rest/src/main/java/internal/org/springframework/content/rest/contentservice/ContentStoreContentService.java index c2063beb0..5c4d64eff 100644 --- a/spring-content-rest/src/main/java/internal/org/springframework/content/rest/contentservice/ContentStoreContentService.java +++ b/spring-content-rest/src/main/java/internal/org/springframework/content/rest/contentservice/ContentStoreContentService.java @@ -178,9 +178,10 @@ public void setContent(HttpServletRequest request, HttpServletResponse response, Object contentArg = convertContentArg(source, methodToUse.getParameterTypes()[indexOfContentArg(methodToUse.getParameterTypes())]); argsList.add(contentArg); if (methodToUse.getParameters().length > 3 && methodToUse.getParameters()[3].getType().equals(long.class)) { - long len = -1L; + long len = source.contentLength(); + // if available use the original content length - if (headers.containsKey(HttpHeaders.CONTENT_LENGTH)) { + if (len <= 0L && headers.containsKey(HttpHeaders.CONTENT_LENGTH)) { len = headers.getContentLength(); } argsList.add(len); From 57648a4807d28671c88106625c3a3e3ab49339b5 Mon Sep 17 00:00:00 2001 From: Igor Dianov Date: Sat, 26 Nov 2022 08:39:42 -0800 Subject: [PATCH 2/4] Revert "fix: use resource content length to set content length property" This reverts commit d47752b90990f4f4ddc9209799f0f509d71a3fd6. --- .../rest/contentservice/ContentStoreContentService.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/spring-content-rest/src/main/java/internal/org/springframework/content/rest/contentservice/ContentStoreContentService.java b/spring-content-rest/src/main/java/internal/org/springframework/content/rest/contentservice/ContentStoreContentService.java index 5c4d64eff..c2063beb0 100644 --- a/spring-content-rest/src/main/java/internal/org/springframework/content/rest/contentservice/ContentStoreContentService.java +++ b/spring-content-rest/src/main/java/internal/org/springframework/content/rest/contentservice/ContentStoreContentService.java @@ -178,10 +178,9 @@ public void setContent(HttpServletRequest request, HttpServletResponse response, Object contentArg = convertContentArg(source, methodToUse.getParameterTypes()[indexOfContentArg(methodToUse.getParameterTypes())]); argsList.add(contentArg); if (methodToUse.getParameters().length > 3 && methodToUse.getParameters()[3].getType().equals(long.class)) { - long len = source.contentLength(); - + long len = -1L; // if available use the original content length - if (len <= 0L && headers.containsKey(HttpHeaders.CONTENT_LENGTH)) { + if (headers.containsKey(HttpHeaders.CONTENT_LENGTH)) { len = headers.getContentLength(); } argsList.add(len); From d8a38f76461aabcaa607dbfd045895e12fdefb4c Mon Sep 17 00:00:00 2001 From: Igor Dianov Date: Sat, 26 Nov 2022 08:39:59 -0800 Subject: [PATCH 3/4] fix: set content length for multi-part upload request --- .../content/rest/controllers/StoreRestController.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/spring-content-rest/src/main/java/internal/org/springframework/content/rest/controllers/StoreRestController.java b/spring-content-rest/src/main/java/internal/org/springframework/content/rest/controllers/StoreRestController.java index 39a3a46ed..55c293726 100644 --- a/spring-content-rest/src/main/java/internal/org/springframework/content/rest/controllers/StoreRestController.java +++ b/spring-content-rest/src/main/java/internal/org/springframework/content/rest/controllers/StoreRestController.java @@ -125,6 +125,8 @@ public void putMultipartContent(HttpServletRequest request, HttpServletResponse ContentService contentService = contentServiceFactory.getContentService(storeResource); + headers.setContentLength(multiPart.getSize()); + handleMultipart(request, response, headers, contentService, multiPart.getResource(), @@ -144,6 +146,8 @@ public void postMultipartContent(HttpServletRequest request, HttpServletResponse ContentService contentService = contentServiceFactory.getContentService(storeResource); + headers.setContentLength(multiPart.getSize()); + handleMultipart(request, response, headers, contentService, new InputStreamResource(multiPart.getInputStream(), multiPart.getOriginalFilename()), From 7eec9727814d09a56b506b45058474ab88cbd750 Mon Sep 17 00:00:00 2001 From: Igor Dianov Date: Sat, 26 Nov 2022 08:40:25 -0800 Subject: [PATCH 4/4] fix: add test to assert correct content length is set --- .../content/rest/controllers/StoreRestEndpointsIT.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/spring-content-rest/src/test/java/it/internal/org/springframework/content/rest/controllers/StoreRestEndpointsIT.java b/spring-content-rest/src/test/java/it/internal/org/springframework/content/rest/controllers/StoreRestEndpointsIT.java index 9cb2c3eb7..576f1f413 100644 --- a/spring-content-rest/src/test/java/it/internal/org/springframework/content/rest/controllers/StoreRestEndpointsIT.java +++ b/spring-content-rest/src/test/java/it/internal/org/springframework/content/rest/controllers/StoreRestEndpointsIT.java @@ -33,6 +33,7 @@ import static com.github.paulcwarren.ginkgo4j.Ginkgo4jDSL.Describe; import static com.github.paulcwarren.ginkgo4j.Ginkgo4jDSL.FIt; import static com.github.paulcwarren.ginkgo4j.Ginkgo4jDSL.It; +import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.CoreMatchers.nullValue; @@ -94,6 +95,7 @@ public class StoreRestEndpointsIT { assertThat(IOUtils.contentEquals( new ByteArrayInputStream("New multi-part content".getBytes()), r.getInputStream()), is(true)); + assertThat(r.contentLength(), equalTo(Long.valueOf(content.length()))); }); }); Context("given a DELETE request to that path", () -> { @@ -159,6 +161,7 @@ public class StoreRestEndpointsIT { new ByteArrayInputStream( "New multi-part content".getBytes()), r.getInputStream()), is(true)); + assertThat(r.contentLength(), equalTo(Long.valueOf(content.length()))); }); }); It("should delete the resource", () -> { @@ -234,6 +237,7 @@ public class StoreRestEndpointsIT { new ByteArrayInputStream( "New multi-part content".getBytes()), r.getInputStream()), is(true)); + assertThat(r.contentLength(), equalTo(Long.valueOf(content.length()))); }); }); It("should delete the resource", () -> {