From 270a8c491d8afa2c5dbe986abdf99ecf766a239f Mon Sep 17 00:00:00 2001 From: duandongmei Date: Mon, 9 Jul 2018 09:18:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0=E6=91=98?= =?UTF-8?q?=E8=A6=81=E5=92=8C=E6=A0=B7=E4=BE=8B=E6=96=87=E4=BB=B6=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../interceptor/MultipartFileIntercepter.java | 69 +++++++++++-------- src/main/java/com/nis/util/Constants.java | 1 + src/main/resources/nis.properties | 1 + src/main/resources/spring-mvc.xml | 1 + 4 files changed, 42 insertions(+), 30 deletions(-) diff --git a/src/main/java/com/nis/interceptor/MultipartFileIntercepter.java b/src/main/java/com/nis/interceptor/MultipartFileIntercepter.java index 151757413..f968223c0 100644 --- a/src/main/java/com/nis/interceptor/MultipartFileIntercepter.java +++ b/src/main/java/com/nis/interceptor/MultipartFileIntercepter.java @@ -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 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 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; diff --git a/src/main/java/com/nis/util/Constants.java b/src/main/java/com/nis/util/Constants.java index 75d2cd224..ad5e1e8e8 100644 --- a/src/main/java/com/nis/util/Constants.java +++ b/src/main/java/com/nis/util/Constants.java @@ -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 diff --git a/src/main/resources/nis.properties b/src/main/resources/nis.properties index 2f2356be7..4da28540d 100644 --- a/src/main/resources/nis.properties +++ b/src/main/resources/nis.properties @@ -316,6 +316,7 @@ redirect_content_key=content redirect_response_code_startwith=30 #样例文件上传的uri关键词 sample_upload_url_keyword=/av +digest_upload_url_keyword=/fileTransfer #样例和摘要文件大小类型设置 sample_file_type=,mp4,flv,ivf,mp2v, #10M 10485760 diff --git a/src/main/resources/spring-mvc.xml b/src/main/resources/spring-mvc.xml index edced67b4..749430c00 100644 --- a/src/main/resources/spring-mvc.xml +++ b/src/main/resources/spring-mvc.xml @@ -247,6 +247,7 @@ +