@@ -39,37 +39,44 @@ public class MultipartFileIntercepter extends CommonsMultipartResolver{
String encoding = determineEncoding ( request ) ;
//是否是样例文件
boolean isSampleFileUpload = request . getRequestURI ( ) . contains ( Constants . SAMPLE_UPLOAD_URL_KEYWORD ) ;
FileUpload fileUpload = this . prepareFileUpload ( encod ing , isSampleFileUpload ) ;
boolean isDigestFileUpload = request . getRequestURI ( ) . conta ins ( Constants . DIGEST_UPLOAD_URL_KEYWORD ) ;
FileUpload fileUpload = this . prepareFileUpload ( encoding , isSampleFileUpload , isDigestFileUpload ) ;
long fileUploadTotalSize = 0l ;
Properties languageProp = getMsgProp ( ) ;
MultipartParsingResult multipartParsingResult = null ;
try {
/*****************预先获取上传文件的总的大小************/
FileUpload fileUploadTotal = fileUpload ;
ServletRequestContext ctx = new ServletRequestContext ( request ) ;
InputStream input = ctx . getInputStream ( ) ;
@SuppressWarnings ( " deprecation " ) // still has to be backward compatible
int contentLengthInt = ctx . getContentLength ( ) ;
fileUploadTotalSize = UploadContext . class . isAssignableFrom ( input . getClass ( ) )
// Inline conditional is OK here CHECKSTYLE:OFF
? ( ( UploadContext ) ctx ) . contentLength ( )
: contentLengthInt ;
// CHECKSTYLE:ON
logger . error ( " 上传文件总大小为 " + fileUploadTotalSize ) ;
/*****************预先获取上传文件的总的大小************/
//验证文件总大小
if ( fileUploadTotalSize > fileUpload . getSizeMax ( ) ) {
throw new MultiPartNewException ( " " , fileUploadTotalSize , fileUpload . getSizeMax ( ) , languageProp , null ) ;
}
//设置文件上传SizeMax为总文件的大小, 否则无法通过SizeLimit(总的文件大小)校验,就无法进行下面单个文件大小的校验
fileUploadTotal . setSizeMax ( fileUploadTotalSize ) ;
List fileItems = ( ( ServletFileUpload ) fileUploadTotal ) . parseRequest ( request ) ;
MultipartParsingResult multipartParsingResult = parseFileItems ( fileItems , encoding ) ;
MultiValueMap < String , MultipartFile > files = multipartParsingResult . getMulti part Files ( ) ;
//单个文件验证文件格式和文件大小
validFileList ( files , fileUpload , languageProp , isSampleFileUpload ) ;
if ( isSampleFileUpload | | isDigestFileUpload ) {
/*****************预先获取上传文件的总的大小************/
FileUpload fileUploadTotal = fileUpload ;
ServletRequestContext ctx = new ServletRequestContext ( request ) ;
InputStream input = ctx . getInputStream ( ) ;
@SuppressWarnings ( " deprecation " ) // still has to be backward compatible
int contentLengthInt = ctx . getContentLength ( ) ;
fileUploadTotalSize = UploadContext . class . isAssignableFrom ( input . getClass ( ) )
// Inline conditional is OK here CHECKSTYLE:OFF
? ( ( UploadContext ) ctx ) . contentLength( )
: contentLengthInt ;
// CHECKSTYLE:ON
logger . error ( " 上传文件总大小为 " + fileUploadTotalSize ) ;
/*****************预先获取上传文件的总的大小************/
//验证文件总大小
if ( fileUploadTotalSize > fileUpload . getSizeMax ( ) ) {
throw new MultiPartNewException ( " " , fileUploadTotalSize , fileUpload . getSizeMax ( ) , languageProp , null ) ;
}
//设置文件上传SizeMax为总文件的大小, 否则无法通过SizeLimit(总的文件大小)校验,就无法进行下面单个文件大小的校验
fileUploadTotal . setSizeMax ( fileUploadTotalSize ) ;
List fileItems = ( ( ServletFileUpload ) fileUploadTotal ) . parseRequest ( request ) ;
multipartParsingResult = parse FileItems ( fileItems , encoding ) ;
MultiValueMap < String , MultipartFile > files = multipartParsingResult . getMultipartFiles ( ) ;
//单个文件验证文件格式和文件大小
validFileList ( files , fileUpload , languageProp , isSampleFileUpload ) ;
} else {
List fileItems = ( ( ServletFileUpload ) fileUpload ) . parseRequest ( request ) ;
multipartParsingResult = this . parseFileItems ( fileItems , encoding ) ;
}
return multipartParsingResult ;
@@ -120,7 +127,7 @@ public class MultipartFileIntercepter extends CommonsMultipartResolver{
* @param isSampleFileUpload
* @return
*/
protected FileUpload prepareFileUpload ( String encoding , boolean isSampleFileUpload ) {
protected FileUpload prepareFileUpload ( String encoding , boolean isSampleFileUpload , boolean isDigestFileUpload ) {
FileUpload fileUpload = getFileUpload ( ) ;
FileUpload actualFileUpload = fileUpload ;
if ( encoding ! = null & & ! encoding . equals ( fileUpload . getHeaderEncoding ( ) ) ) {
@@ -128,8 +135,10 @@ public class MultipartFileIntercepter extends CommonsMultipartResolver{
actualFileUpload . setHeaderEncoding ( encoding ) ;
if ( isSampleFileUpload ) {
actualFileUpload . setSizeMax ( Constants . SAMPLE_TOTAL_FILE_MAX_SIZE ) ;
} else {
} else if ( isDigestFileUpload ) {
actualFileUpload . setSizeMax ( Constants . DIGEST_TOTAL_FILE_MAX_SIZE ) ;
} else {
actualFileUpload . setSizeMax ( fileUpload . getSizeMax ( ) ) ;
}
}
return actualFileUpload ;