package com.mossle.core;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.MultipartResolver;
public class MultipartHandler {
private static Logger logger = LoggerFactory
.getLogger(MultipartHandler.class);
private MultipartResolver multipartResolver;
private MultipartHttpServletRequest multipartHttpServletRequest = null;
private MultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<String, String>();
private MultiValueMap<String, MultipartFile> multiFileMap;
public MultipartHandler(MultipartResolver multipartResolver) {
this.multipartResolver = multipartResolver;
}
public void handle(HttpServletRequest request) {
if (request instanceof MultipartHttpServletRequest) {
logger.debug("force cast to MultipartHttpServletRequest");
MultipartHttpServletRequest req = (MultipartHttpServletRequest) request;
this.multiFileMap = req.getMultiFileMap();
logger.debug("multiFileMap : {}", multiFileMap);
this.handleMultiValueMap(req);
logger.debug("multiValueMap : {}", multiValueMap);
return;
}
if (multipartResolver.isMultipart(request)) {
logger.debug("is multipart : {}",
multipartResolver.isMultipart(request));
this.multipartHttpServletRequest = multipartResolver
.resolveMultipart(request);
logger.debug("multipartHttpServletRequest : {}",
multipartHttpServletRequest);
this.multiFileMap = multipartHttpServletRequest.getMultiFileMap();
logger.debug("multiFileMap : {}", multiFileMap);
this.handleMultiValueMap(multipartHttpServletRequest);
logger.debug("multiValueMap : {}", multiValueMap);
} else {
this.handleMultiValueMap(request);
logger.debug("multiValueMap : {}", multiValueMap);
}
}
public void clear() {
if (multipartHttpServletRequest == null) {
return;
}
multipartResolver.cleanupMultipart(multipartHttpServletRequest);
}
public void handleMultiValueMap(HttpServletRequest request) {
Map<String, String[]> parameterMap = request.getParameterMap();
for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
String key = entry.getKey();
for (String value : entry.getValue()) {
multiValueMap.add(key, value);
}
}
}
public MultiValueMap<String, String> getMultiValueMap() {
return multiValueMap;
}
public MultiValueMap<String, MultipartFile> getMultiFileMap() {
return multiFileMap;
}
}