/** * Obtain the MultipartFile Map for retrieval, * lazily initializing it if necessary. * @see #initializeMultipart() */ protected MultiValueMap<String, MultipartFile> getMultipartFiles() { if (this.multipartFiles == null) { initializeMultipart(); } return this.multipartFiles; }
/** * Obtain the multipart parameter content type Map for retrieval, * lazily initializing it if necessary. * @see #initializeMultipart() */ protected Map<String, String> getMultipartParameterContentTypes() { if (this.multipartParameterContentTypes == null) { initializeMultipart(); } return this.multipartParameterContentTypes; }
/** * Look up the MultipartResolver that this filter should use, * taking the current HTTP request as argument. * <p>The default implementation delegates to the {@code lookupMultipartResolver} * without arguments. * @return the MultipartResolver to use * @see #lookupMultipartResolver() */ protected MultipartResolver lookupMultipartResolver(HttpServletRequest request) { return lookupMultipartResolver(); }
public static boolean isMultipartArgument(MethodParameter parameter) { Class<?> paramType = parameter.getNestedParameterType(); return (MultipartFile.class == paramType || isMultipartFileCollection(parameter) || isMultipartFileArray(parameter) || (Part.class == paramType || isPartCollection(parameter) || isPartArray(parameter))); }
@Nullable public static MultipartRequest resolveMultipartRequest(NativeWebRequest webRequest) { MultipartRequest multipartRequest = webRequest.getNativeRequest(MultipartRequest.class); if (multipartRequest != null) { return multipartRequest; } HttpServletRequest servletRequest = webRequest.getNativeRequest(HttpServletRequest.class); if (servletRequest != null && isMultipartContent(servletRequest)) { return new StandardMultipartHttpServletRequest(servletRequest); } return null; }
/** * Wrap the given HttpServletRequest in a MultipartHttpServletRequest. * @param request the servlet request to wrap * @param mpFiles a map of the multipart files * @param mpParams a map of the parameters to expose, * with Strings as keys and String arrays as values */ public DefaultMultipartHttpServletRequest(HttpServletRequest request, MultiValueMap<String, MultipartFile> mpFiles, Map<String, String[]> mpParams, Map<String, String> mpParamContentTypes) { super(request); setMultipartFiles(mpFiles); setMultipartParameters(mpParams); setMultipartParameterContentTypes(mpParamContentTypes); }
@Override public MultipartHttpServletRequest resolveMultipart(HttpServletRequest request) throws MultipartException { return new StandardMultipartHttpServletRequest(request, this.resolveLazily); }
@Override @Nullable public String getParameter(String name) { String[] values = getMultipartParameters().get(name); if (values != null) { return (values.length > 0 ? values[0] : null); } return super.getParameter(name); }
@Override protected void initializeMultipart() { parseRequest(getRequest()); }
private DefaultMultipartHttpServletRequest createMultipartRequest() { insertQueryParams(); return new DefaultMultipartHttpServletRequest(this.servletRequest, new LinkedMultiValueMap<>(), this.multipartParams, new HashMap<>()); }
@Override public void setAsText(String text) { setValue(text); }
@Override public String getAsText() { byte[] value = (byte[]) getValue(); return (value != null ? new String(value) : ""); }
private static boolean isPartCollection(MethodParameter methodParam) { return (Part.class == getCollectionParameterType(methodParam)); }
@Override public MultiValueMap<String, MultipartFile> getMultiFileMap() { return getMultipartFiles(); }
/** * Create a new StandardMultipartHttpServletRequest wrapper for the given request. * @param request the servlet request to wrap * @param lazyParsing whether multipart parsing should be triggered lazily on * first access of multipart files or parameters * @throws MultipartException if an immediate parsing attempt failed * @since 3.2.9 */ public StandardMultipartHttpServletRequest(HttpServletRequest request, boolean lazyParsing) throws MultipartException { super(request); if (!lazyParsing) { parseRequest(request); } }
@Override public HttpHeaders getMultipartHeaders(String paramOrFileName) { String contentType = getMultipartContentType(paramOrFileName); if (contentType != null) { HttpHeaders headers = new HttpHeaders(); headers.add(CONTENT_TYPE, contentType); return headers; } else { return null; } }
@Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { super.doFilterInternal(request, response, filterChain); super.doFilterInternal(request, response, filterChain); if (invoked) { throw new ServletException("Should not have been invoked twice"); } invoked = true; } };
@Test // SPR-15205 public void filenameRfc2047() throws Exception { String disposition = "form-data; name=\"file\"; filename=\"=?UTF-8?Q?Declara=C3=A7=C3=A3o.pdf?=\""; StandardMultipartHttpServletRequest request = requestWithPart("file", disposition, ""); MultipartFile multipartFile = request.getFile("file"); assertNotNull(multipartFile); assertEquals("Declaração.pdf", multipartFile.getOriginalFilename()); }
/** * Obtain the multipart parameter Map for retrieval, * lazily initializing it if necessary. * @see #initializeMultipart() */ protected Map<String, String[]> getMultipartParameters() { if (this.multipartParameters == null) { initializeMultipart(); } return this.multipartParameters; }
private static boolean isMultipartFileCollection(MethodParameter methodParam) { return (MultipartFile.class == getCollectionParameterType(methodParam)); }