文件上传摘要和样例文件处理

This commit is contained in:
duandongmei
2018-07-09 09:18:44 +08:00
parent 1a28c66dfc
commit 270a8c491d
4 changed files with 42 additions and 30 deletions

View File

@@ -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;

View File

@@ -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

View File

@@ -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

View File

@@ -247,6 +247,7 @@
<bean id="multipartResolver"
class="com.nis.interceptor.MultipartFileIntercepter" >
<property name="defaultEncoding" value="utf-8"></property>
<property name="maxUploadSize" value="5242880"></property><!-- 5*1024*1024 -->
</bean>
<bean