Search in sources :

Example 1 with Part

use of jakarta.servlet.http.Part in project spring-framework by spring-projects.

the class RequestPartServletServerHttpRequest method getBody.

@Override
public InputStream getBody() throws IOException {
    // Prefer Servlet Part resolution to cover file as well as parameter streams
    boolean servletParts = (this.multipartRequest instanceof StandardMultipartHttpServletRequest);
    if (servletParts) {
        Part part = retrieveServletPart();
        if (part != null) {
            return part.getInputStream();
        }
    }
    // Spring-style distinction between MultipartFile and String parameters
    MultipartFile file = this.multipartRequest.getFile(this.requestPartName);
    if (file != null) {
        return file.getInputStream();
    }
    String paramValue = this.multipartRequest.getParameter(this.requestPartName);
    if (paramValue != null) {
        return new ByteArrayInputStream(paramValue.getBytes(determineCharset()));
    }
    // Fallback: Servlet Part resolution even if not indicated
    if (!servletParts) {
        Part part = retrieveServletPart();
        if (part != null) {
            return part.getInputStream();
        }
    }
    throw new IllegalStateException("No body available for request part '" + this.requestPartName + "'");
}
Also used : MultipartFile(org.springframework.web.multipart.MultipartFile) ByteArrayInputStream(java.io.ByteArrayInputStream) Part(jakarta.servlet.http.Part)

Example 2 with Part

use of jakarta.servlet.http.Part in project spring-framework by spring-projects.

the class MultipartResolutionDelegate method resolveMultipartArgument.

@Nullable
public static Object resolveMultipartArgument(String name, MethodParameter parameter, HttpServletRequest request) throws Exception {
    MultipartHttpServletRequest multipartRequest = WebUtils.getNativeRequest(request, MultipartHttpServletRequest.class);
    boolean isMultipart = (multipartRequest != null || isMultipartContent(request));
    if (MultipartFile.class == parameter.getNestedParameterType()) {
        if (!isMultipart) {
            return null;
        }
        if (multipartRequest == null) {
            multipartRequest = new StandardMultipartHttpServletRequest(request);
        }
        return multipartRequest.getFile(name);
    } else if (isMultipartFileCollection(parameter)) {
        if (!isMultipart) {
            return null;
        }
        if (multipartRequest == null) {
            multipartRequest = new StandardMultipartHttpServletRequest(request);
        }
        List<MultipartFile> files = multipartRequest.getFiles(name);
        return (!files.isEmpty() ? files : null);
    } else if (isMultipartFileArray(parameter)) {
        if (!isMultipart) {
            return null;
        }
        if (multipartRequest == null) {
            multipartRequest = new StandardMultipartHttpServletRequest(request);
        }
        List<MultipartFile> files = multipartRequest.getFiles(name);
        return (!files.isEmpty() ? files.toArray(new MultipartFile[0]) : null);
    } else if (Part.class == parameter.getNestedParameterType()) {
        if (!isMultipart) {
            return null;
        }
        return request.getPart(name);
    } else if (isPartCollection(parameter)) {
        if (!isMultipart) {
            return null;
        }
        List<Part> parts = resolvePartList(request, name);
        return (!parts.isEmpty() ? parts : null);
    } else if (isPartArray(parameter)) {
        if (!isMultipart) {
            return null;
        }
        List<Part> parts = resolvePartList(request, name);
        return (!parts.isEmpty() ? parts.toArray(new Part[0]) : null);
    } else {
        return UNRESOLVABLE;
    }
}
Also used : MultipartFile(org.springframework.web.multipart.MultipartFile) Part(jakarta.servlet.http.Part) ArrayList(java.util.ArrayList) List(java.util.List) MultipartHttpServletRequest(org.springframework.web.multipart.MultipartHttpServletRequest) Nullable(org.springframework.lang.Nullable)

Example 3 with Part

use of jakarta.servlet.http.Part in project spring-framework by spring-projects.

the class StandardMultipartHttpServletRequest method parseRequest.

private void parseRequest(HttpServletRequest request) {
    try {
        Collection<Part> parts = request.getParts();
        this.multipartParameterNames = new LinkedHashSet<>(parts.size());
        MultiValueMap<String, MultipartFile> files = new LinkedMultiValueMap<>(parts.size());
        for (Part part : parts) {
            String headerValue = part.getHeader(HttpHeaders.CONTENT_DISPOSITION);
            ContentDisposition disposition = ContentDisposition.parse(headerValue);
            String filename = disposition.getFilename();
            if (filename != null) {
                if (filename.startsWith("=?") && filename.endsWith("?=")) {
                    filename = MimeDelegate.decode(filename);
                }
                files.add(part.getName(), new StandardMultipartFile(part, filename));
            } else {
                this.multipartParameterNames.add(part.getName());
            }
        }
        setMultipartFiles(files);
    } catch (Throwable ex) {
        handleParseFailure(ex);
    }
}
Also used : MultipartFile(org.springframework.web.multipart.MultipartFile) ContentDisposition(org.springframework.http.ContentDisposition) LinkedMultiValueMap(org.springframework.util.LinkedMultiValueMap) Part(jakarta.servlet.http.Part)

Example 4 with Part

use of jakarta.servlet.http.Part in project spring-framework by spring-projects.

the class RequestPartMethodArgumentResolverTests method resolvePartArrayArgument.

@Test
public void resolvePartArrayArgument() throws Exception {
    MockHttpServletRequest request = new MockHttpServletRequest();
    request.setMethod("POST");
    request.setContentType("multipart/form-data");
    MockPart part1 = new MockPart("requestPart", "Hello World 1".getBytes());
    MockPart part2 = new MockPart("requestPart", "Hello World 2".getBytes());
    request.addPart(part1);
    request.addPart(part2);
    request.addPart(new MockPart("otherPart", "Hello World".getBytes()));
    webRequest = new ServletWebRequest(request);
    Object result = resolver.resolveArgument(paramPartArray, null, webRequest, null);
    assertThat(result instanceof Part[]).isTrue();
    Part[] parts = (Part[]) result;
    assertThat(parts.length).isEqualTo(2);
    assertThat(part1).isEqualTo(parts[0]);
    assertThat(part2).isEqualTo(parts[1]);
}
Also used : MockHttpServletRequest(org.springframework.web.testfixture.servlet.MockHttpServletRequest) RequestPart(org.springframework.web.bind.annotation.RequestPart) MockPart(org.springframework.web.testfixture.servlet.MockPart) Part(jakarta.servlet.http.Part) MockPart(org.springframework.web.testfixture.servlet.MockPart) ServletWebRequest(org.springframework.web.context.request.ServletWebRequest) Test(org.junit.jupiter.api.Test)

Example 5 with Part

use of jakarta.servlet.http.Part in project spring-framework by spring-projects.

the class RequestPartMethodArgumentResolverTests method resolvePartArgument.

@Test
public void resolvePartArgument() throws Exception {
    MockHttpServletRequest request = new MockHttpServletRequest();
    request.setMethod("POST");
    request.setContentType("multipart/form-data");
    MockPart expected = new MockPart("part", "Hello World".getBytes());
    request.addPart(expected);
    request.addPart(new MockPart("otherPart", "Hello World".getBytes()));
    webRequest = new ServletWebRequest(request);
    Object result = resolver.resolveArgument(paramPart, null, webRequest, null);
    assertThat(result instanceof Part).isTrue();
    assertThat(result).as("Invalid result").isEqualTo(expected);
}
Also used : MockHttpServletRequest(org.springframework.web.testfixture.servlet.MockHttpServletRequest) RequestPart(org.springframework.web.bind.annotation.RequestPart) MockPart(org.springframework.web.testfixture.servlet.MockPart) Part(jakarta.servlet.http.Part) MockPart(org.springframework.web.testfixture.servlet.MockPart) ServletWebRequest(org.springframework.web.context.request.ServletWebRequest) Test(org.junit.jupiter.api.Test)

Aggregations

Part (jakarta.servlet.http.Part)19 Test (org.junit.jupiter.api.Test)13 MockPart (org.springframework.web.testfixture.servlet.MockPart)10 MockHttpServletRequest (org.springframework.web.testfixture.servlet.MockHttpServletRequest)9 ServletWebRequest (org.springframework.web.context.request.ServletWebRequest)8 MethodParameter (org.springframework.core.MethodParameter)7 RequestPart (org.springframework.web.bind.annotation.RequestPart)7 MvcAnnotationPredicates.requestPart (org.springframework.web.testfixture.method.MvcAnnotationPredicates.requestPart)5 IOException (java.io.IOException)4 RequestParam (org.springframework.web.bind.annotation.RequestParam)4 MultipartFile (org.springframework.web.multipart.MultipartFile)4 KeyDataPair (com.gargoylesoftware.htmlunit.util.KeyDataPair)3 MockHttpServletRequest (org.springframework.mock.web.MockHttpServletRequest)3 LinkedMultiValueMap (org.springframework.util.LinkedMultiValueMap)3 File (java.io.File)2 ArrayList (java.util.ArrayList)2 List (java.util.List)2 Map (java.util.Map)2 MultiValueMap (org.springframework.util.MultiValueMap)2 ServletException (jakarta.servlet.ServletException)1