文件上传intercepter中,如果是修改,对为修改的文件不做校验
This commit is contained in:
@@ -5,11 +5,16 @@ import static java.lang.String.format;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import org.apache.commons.fileupload.FileItem;
|
||||
import org.apache.commons.fileupload.FileUpload;
|
||||
import org.apache.commons.fileupload.FileUploadBase;
|
||||
import org.apache.commons.fileupload.FileUploadException;
|
||||
@@ -19,10 +24,14 @@ import org.apache.commons.fileupload.servlet.ServletFileUpload;
|
||||
import org.apache.commons.fileupload.servlet.ServletRequestContext;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.springframework.context.i18n.LocaleContextHolder;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.util.LinkedMultiValueMap;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.multipart.MultipartException;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
import org.springframework.web.multipart.commons.CommonsFileUploadSupport;
|
||||
import org.springframework.web.multipart.commons.CommonsMultipartFile;
|
||||
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
|
||||
|
||||
import com.nis.exceptions.MultiPartNewException;
|
||||
@@ -48,7 +57,6 @@ public class MultipartFileIntercepter extends CommonsMultipartResolver{
|
||||
if(isSampleFileUpload || isDigestFileUpload){
|
||||
/*****************预先获取上传文件的总的大小************/
|
||||
FileUpload fileUploadTotal = fileUpload;
|
||||
|
||||
ServletRequestContext ctx = new ServletRequestContext(request);
|
||||
InputStream input=ctx.getInputStream();
|
||||
@SuppressWarnings("deprecation") // still has to be backward compatible
|
||||
@@ -166,5 +174,66 @@ public class MultipartFileIntercepter extends CommonsMultipartResolver{
|
||||
}
|
||||
return msgProp;
|
||||
}
|
||||
protected CommonsFileUploadSupport.MultipartParsingResult parseFileItems(List<FileItem> fileItems, String encoding) {
|
||||
MultiValueMap<String, MultipartFile> multipartFiles = new LinkedMultiValueMap<String, MultipartFile>();
|
||||
Map<String, String[]> multipartParameters = new HashMap<String, String[]>();
|
||||
Map<String, String> multipartParameterContentTypes = new HashMap<String, String>();
|
||||
|
||||
// Extract multipart files and multipart parameters.
|
||||
for (FileItem fileItem : fileItems) {
|
||||
if (fileItem.isFormField()) {
|
||||
String value;
|
||||
String partEncoding = determineEncoding(fileItem.getContentType(), encoding);
|
||||
if (partEncoding != null) {
|
||||
try {
|
||||
value = fileItem.getString(partEncoding);
|
||||
}
|
||||
catch (UnsupportedEncodingException ex) {
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.warn("Could not decode multipart item '" + fileItem.getFieldName() +
|
||||
"' with encoding '" + partEncoding + "': using platform default");
|
||||
}
|
||||
value = fileItem.getString();
|
||||
}
|
||||
}
|
||||
else {
|
||||
value = fileItem.getString();
|
||||
}
|
||||
String[] curParam = multipartParameters.get(fileItem.getFieldName());
|
||||
if (curParam == null) {
|
||||
// simple form field
|
||||
multipartParameters.put(fileItem.getFieldName(), new String[] {value});
|
||||
}
|
||||
else {
|
||||
// array of simple form fields
|
||||
String[] newParam = StringUtils.addStringToArray(curParam, value);
|
||||
multipartParameters.put(fileItem.getFieldName(), newParam);
|
||||
}
|
||||
multipartParameterContentTypes.put(fileItem.getFieldName(), fileItem.getContentType());
|
||||
}
|
||||
else {
|
||||
// multipart file field
|
||||
CommonsMultipartFile file = new CommonsMultipartFile(fileItem);
|
||||
if(!StringUtils.isEmpty(file.getOriginalFilename())){
|
||||
multipartFiles.add(file.getName(), file);
|
||||
}
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Found multipart file [" + file.getName() + "] of size " + file.getSize() +
|
||||
" bytes with original filename [" + file.getOriginalFilename() + "], stored " +
|
||||
file.getStorageDescription());
|
||||
}
|
||||
}
|
||||
}
|
||||
return new MultipartParsingResult(multipartFiles, multipartParameters, multipartParameterContentTypes);
|
||||
}
|
||||
|
||||
private String determineEncoding(String contentTypeHeader, String defaultEncoding) {
|
||||
if (!StringUtils.hasText(contentTypeHeader)) {
|
||||
return defaultEncoding;
|
||||
}
|
||||
MediaType contentType = MediaType.parseMediaType(contentTypeHeader);
|
||||
Charset charset = contentType.getCharSet();
|
||||
return (charset != null ? charset.name() : defaultEncoding);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user