文件上传摘要和样例文件处理
This commit is contained in:
@@ -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(encoding,isSampleFileUpload);
|
||||
boolean isDigestFileUpload = request.getRequestURI().contains(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.getMultipartFiles();
|
||||
//单个文件验证文件格式和文件大小
|
||||
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=parseFileItems(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;
|
||||
|
||||
@@ -410,6 +410,7 @@ public final class Constants {
|
||||
public static final String REDIRECT_RESPONSE_CODE_STARTWITH = Configurations.getStringProperty("redirect_response_code_startwith","30");
|
||||
|
||||
public static final String SAMPLE_UPLOAD_URL_KEYWORD = Configurations.getStringProperty("sample_upload_url_keyword","av");
|
||||
public static final String DIGEST_UPLOAD_URL_KEYWORD = Configurations.getStringProperty("digest_upload_url_keyword","fileTransfer");
|
||||
public static final String SAMPLE_FILE_TYPE = Configurations.getStringProperty("sample_file_type","");
|
||||
public static final long SAMPLE_SINGLE_FILE_MAX_SIZE = Configurations.getLongProperty("sample_single_file_max_size",10485760l);//10M
|
||||
public static final long SAMPLE_TOTAL_FILE_MAX_SIZE = Configurations.getLongProperty("sample_total_file_max_size",52428800l);//50M
|
||||
|
||||
Reference in New Issue
Block a user