MultipartUtils { public static String getFileName(final Map<String, List<String>> headers) { final String contentDisposition = getHeader(CONTENT_DISPOSITION, headers); String fileName = null; if (contentDisposition != null) { String contentDispositionLc = contentDisposition.toLowerCase(Locale.ENGLISH); if (contentDispositionLc.startsWith(FORM_DATA) || contentDispositionLc.startsWith(ATTACHMENT)) { ParameterParser parser = new ParameterParser(); parser.setLowerCaseNames(true); Map<String, String> params = parser.parse(contentDisposition, ';'); if (params.containsKey("filename")) { fileName = params.get("filename"); if (fileName != null) { fileName = fileName.trim(); } else { fileName = ""; } } } } return fileName; } private  MultipartUtils(); static boolean isMultipart(final String contentTypeHeaderValue); static boolean hasMultipartContentType(final Map<String, List<String>> headers); static String getContentType(final Map<String, List<String>> headers); static long getContentLength(final Map<String, List<String>> headers); static String getCharEncoding(final Map<String, List<String>> headers); static List<String> getHeaders(final String headerName, final Map<String, List<String>> headers); static String getHeader(final String headerName, final Map<String, List<String>> headers); static boolean isFormField(final Map<String, List<String>> headers, final MultipartContext context); static String readFormParameterValue(final StreamStorage streamStorage, final Map<String, List<String>> headers); static String getFileName(final Map<String, List<String>> headers); static String getFieldName(final Map<String, List<String>> headers); static boolean isContentTransferEncodingBase64Encoded(final Map<String, List<String>> partHeaders); static byte[] getBoundary(final String contentType); static final byte DASH; static final byte CR; static final byte LF; static final byte[] HEADER_DELIMITER; static final String MULTIPART; static final String CONTENT_DISPOSITION; static final String CONTENT_TRANSFER_ENCODING; static final String CONTENT_LENGTH; static final String CONTENT_TYPE; static final String FORM_DATA; static final String ATTACHMENT; static final String MULTIPART_FORM_DATA; static final String MULTIPART_MIXED; static final String TEXT_PLAIN; }
@Test public void testGetFileName(){ Map<String, List<String>> contentDispositionWithFilenameAndName = new HashMap<String, List<String>>(); contentDispositionWithFilenameAndName.put(MultipartUtils.CONTENT_DISPOSITION.toLowerCase(), Collections.singletonList("form-data; name=\"file\"; filename=\"file.txt\"")); assertEquals("file.txt", MultipartUtils.getFileName(contentDispositionWithFilenameAndName)); Map<String, List<String>> contentDispositionWithName = new HashMap<String, List<String>>(); contentDispositionWithName.put(MultipartUtils.CONTENT_DISPOSITION.toLowerCase(), Collections.singletonList("form-data; name=\"file\"")); assertNull(MultipartUtils.getFileName(contentDispositionWithName)); Map<String, List<String>> contentDispositionNoNameNoFileName = new HashMap<String, List<String>>(); contentDispositionNoNameNoFileName.put(MultipartUtils.CONTENT_DISPOSITION.toLowerCase(), Collections.singletonList("form-data")); assertNull(MultipartUtils.getFileName(contentDispositionNoNameNoFileName)); assertNull(MultipartUtils.getFileName(new HashMap<String, List<String>>())); }