文件上传:增加audio、video、picture、voip四种样例文件各自的格式校验

audio_file_type=,wav,ape,ram,mp3,flac,midi,wma,aif,au,aac,mmf,amr,
video_file_type=,mp3,mp4,flv,ivf,mp2v,
picture_file_type=,bmp,gif,jpg,pic,png,tif,
voip_file_type=,mp3,mp4,flv,ivf,mp2v,jpg,
This commit is contained in:
duandongmei
2018-07-30 14:16:23 +08:00
parent 6c35214fda
commit 9835068a4d
3 changed files with 109 additions and 29 deletions

View File

@@ -1,8 +1,6 @@
package com.nis.interceptor; package com.nis.interceptor;
import static java.lang.String.format;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
@@ -38,17 +36,19 @@ import com.nis.exceptions.MultiPartNewException;
import com.nis.util.Configurations; import com.nis.util.Configurations;
import com.nis.util.Constants; import com.nis.util.Constants;
import com.nis.util.FileUtils; import com.nis.util.FileUtils;
import com.nis.util.StringUtil;
public class MultipartFileIntercepter extends CommonsMultipartResolver{ public class MultipartFileIntercepter extends CommonsMultipartResolver{
Logger logger = Logger.getLogger(MultipartFileIntercepter.class); Logger logger = Logger.getLogger(MultipartFileIntercepter.class);
private Integer functionId=0;
protected CommonsFileUploadSupport.MultipartParsingResult parseRequest(HttpServletRequest request)throws MultipartException{ protected CommonsFileUploadSupport.MultipartParsingResult parseRequest(HttpServletRequest request)throws MultipartException{
String encoding = determineEncoding(request); String encoding = determineEncoding(request);
//是否是样例文件 //样例文件URI
boolean isSampleFileUpload = request.getRequestURI().contains(Constants.SAMPLE_UPLOAD_URL_KEYWORD); boolean isSampleFileUpload = request.getRequestURI().toLowerCase().contains(Constants.SAMPLE_UPLOAD_URL_KEYWORD);
boolean isDigestFileUpload = request.getRequestURI().contains(Constants.DIGEST_UPLOAD_URL_KEYWORD); //摘要文件URI
boolean isDigestFileUpload = request.getRequestURI().toLowerCase().contains(Constants.DIGEST_UPLOAD_URL_KEYWORD);
FileUpload fileUpload = this.prepareFileUpload(encoding,isSampleFileUpload,isDigestFileUpload); FileUpload fileUpload = this.prepareFileUpload(encoding,isSampleFileUpload,isDigestFileUpload);
long fileUploadTotalSize=0l; long fileUploadTotalSize=0l;
Properties languageProp=getMsgProp(); Properties languageProp=getMsgProp();
@@ -67,7 +67,7 @@ public class MultipartFileIntercepter extends CommonsMultipartResolver{
? ((UploadContext) ctx).contentLength() ? ((UploadContext) ctx).contentLength()
: contentLengthInt; : contentLengthInt;
// CHECKSTYLE:ON // CHECKSTYLE:ON
logger.error("上传文件总大小为"+fileUploadTotalSize); logger.info("上传文件总大小为"+fileUploadTotalSize);
/*****************预先获取上传文件的总的大小************/ /*****************预先获取上传文件的总的大小************/
//验证文件总大小 //验证文件总大小
if(fileUploadTotalSize > fileUpload.getSizeMax() ){ if(fileUploadTotalSize > fileUpload.getSizeMax() ){
@@ -108,21 +108,35 @@ public class MultipartFileIntercepter extends CommonsMultipartResolver{
*/ */
protected void validFileList(MultiValueMap<String, MultipartFile> multipartFile,FileUpload fileUpload,Properties prop,boolean isSampleFileUpload) throws FileSizeLimitExceededException{ protected void validFileList(MultiValueMap<String, MultipartFile> multipartFile,FileUpload fileUpload,Properties prop,boolean isSampleFileUpload) throws FileSizeLimitExceededException{
String errorInfo=""; String errorInfo="";
String fileTypes="";
String fileType="";
long fileMaxSize=0l; long fileMaxSize=0l;
if(isSampleFileUpload){ if(functionId.equals(52)){ //digest
fileType=Constants.SAMPLE_FILE_TYPE; fileTypes=Constants.DIGEST_FILE_TYPE;
fileMaxSize=Constants.SAMPLE_SINGLE_FILE_MAX_SIZE;
}else{
fileType=Constants.DIGEST_FILE_TYPE;
fileMaxSize=Constants.DIGEST_SINGLE_FILE_MAX_SIZE; fileMaxSize=Constants.DIGEST_SINGLE_FILE_MAX_SIZE;
}else if(functionId.equals(28)){ //audio
fileTypes=Constants.AUDIO_FILE_TYPE;
fileMaxSize=Constants.AUDIO_SINGLE_FILE_MAX_SIZE;
}else if(functionId.equals(29)){ //video
fileTypes=Constants.VIDEO_FILE_TYPE;
fileMaxSize=Constants.VIDEO_SINGLE_FILE_MAX_SIZE;
}else if(functionId.equals(30)){ //picture
fileTypes=Constants.PICTURE_FILE_TYPE;
fileMaxSize=Constants.PICTURE_SINGLE_FILE_MAX_SIZE;
}else if(functionId.equals(31)){ //voip
fileTypes=Constants.VOIP_FILE_TYPE;
fileMaxSize=Constants.VOIP_SINGLE_FILE_MAX_SIZE;
}else{
return;
} }
logger.info("functionId:"+functionId);
logger.info("fileType:"+fileTypes);
logger.info("singleFileMaxSize:"+fileMaxSize);
for (String fileName : multipartFile.keySet()) { for (String fileName : multipartFile.keySet()) {
MultipartFile file= multipartFile.getFirst(fileName); MultipartFile file= multipartFile.getFirst(fileName);
//文件类型错误 //文件类型错误
if(fileType.indexOf(","+FileUtils.getSuffix(file.getOriginalFilename(), false)+",") == -1){ if(fileTypes.indexOf(","+FileUtils.getSuffix(file.getOriginalFilename(), false)+",") == -1){
throw new MultiPartNewException(errorInfo,file.getOriginalFilename(),fileType.substring(0,fileType.length()-1).substring(1),prop,null); throw new MultiPartNewException(errorInfo,file.getOriginalFilename(),fileTypes.substring(0,fileTypes.length()-1).substring(1),prop,null);
} }
if(file.getSize() > fileMaxSize){ if(file.getSize() > fileMaxSize){
throw new MultiPartNewException(errorInfo, file.getOriginalFilename(), file.getSize(), fileMaxSize,prop, null); throw new MultiPartNewException(errorInfo, file.getOriginalFilename(), file.getSize(), fileMaxSize,prop, null);
@@ -203,6 +217,9 @@ public class MultipartFileIntercepter extends CommonsMultipartResolver{
if (curParam == null) { if (curParam == null) {
// simple form field // simple form field
multipartParameters.put(fileItem.getFieldName(), new String[] {value}); multipartParameters.put(fileItem.getFieldName(), new String[] {value});
if(fileItem.getFieldName().toLowerCase().equals("functionid")){
functionId=StringUtil.isEmpty(value) ? 0:Integer.parseInt(value);
}
} }
else { else {
// array of simple form fields // array of simple form fields

View File

@@ -478,14 +478,61 @@ public final class Constants {
public static final String REDIRECT_RESPONSE_CODE_STARTWITH = Configurations.getStringProperty("redirect_response_code_startwith","30"); public static final String REDIRECT_RESPONSE_CODE_STARTWITH = Configurations.getStringProperty("redirect_response_code_startwith","30");
public static final String REPLACE_ZONE_KEY = Configurations.getStringProperty("replace_zone_key","zone"); public static final String REPLACE_ZONE_KEY = Configurations.getStringProperty("replace_zone_key","zone");
public static final String REPLACE_SUBSTITUTE_KEY = Configurations.getStringProperty("replace_substitute_key","substitute"); public static final String REPLACE_SUBSTITUTE_KEY = Configurations.getStringProperty("replace_substitute_key","substitute");
/**
public static final String SAMPLE_UPLOAD_URL_KEYWORD = Configurations.getStringProperty("sample_upload_url_keyword","av"); * 样例文件URL关键字
*/
public static final String SAMPLE_UPLOAD_URL_KEYWORD = Configurations.getStringProperty("sample_upload_url_keyword","av");
/**
* 摘要文件URL关键字
*/
public static final String DIGEST_UPLOAD_URL_KEYWORD = Configurations.getStringProperty("digest_upload_url_keyword","fileTransfer"); 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 public static final long SAMPLE_TOTAL_FILE_MAX_SIZE = Configurations.getLongProperty("sample_total_file_max_size",52428800l);//50M
public static final String DIGEST_FILE_TYPE = Configurations.getStringProperty("digest_file_type",""); /**
* 音频文件支持文件类型
*/
public static final String AUDIO_FILE_TYPE = Configurations.getStringProperty("audio_file_type","");
/**
* 音频文件限制单个文件大小
*/
public static final long AUDIO_SINGLE_FILE_MAX_SIZE = Configurations.getLongProperty("audio_single_file_max_size",10485760l);//10M
/**
* 视频文件支持文件类型
*/
public static final String VIDEO_FILE_TYPE = Configurations.getStringProperty("video_file_type","");
/**
* 视频文件限制单个文件大小
*/
public static final long VIDEO_SINGLE_FILE_MAX_SIZE = Configurations.getLongProperty("video_single_file_max_size",10485760l);//10M
/**
* 图片文件支持文件类型
*/
public static final String PICTURE_FILE_TYPE = Configurations.getStringProperty("picture_file_type","");
/**
* 图片文件限制单个文件大小
*/
public static final long PICTURE_SINGLE_FILE_MAX_SIZE = Configurations.getLongProperty("picture_single_file_max_size",10485760l);//10M
/**
* voip文件支持文件类型
*/
public static final String VOIP_FILE_TYPE = Configurations.getStringProperty("voip_file_type","");
/**
* voip文件限制单个文件大小
*/
public static final long VOIP_SINGLE_FILE_MAX_SIZE = Configurations.getLongProperty("voip_single_file_max_size",10485760l);//10M
/**
* 摘要文件支持文件类型
*/
public static final String DIGEST_FILE_TYPE = Configurations.getStringProperty("digest_file_type","");
/**
* 摘要文件限制单个文件大小
*/
public static final long DIGEST_SINGLE_FILE_MAX_SIZE = Configurations.getLongProperty("digest_single_file_max_size",10485760l);//10M public static final long DIGEST_SINGLE_FILE_MAX_SIZE = Configurations.getLongProperty("digest_single_file_max_size",10485760l);//10M
/**
* 摘要文件限制总文件大小
*/
public static final long DIGEST_TOTAL_FILE_MAX_SIZE = Configurations.getLongProperty("digest_total_file_max_size",52428800l);//50M public static final long DIGEST_TOTAL_FILE_MAX_SIZE = Configurations.getLongProperty("digest_total_file_max_size",52428800l);//50M
//YSP文件特征配置相关参数用于调用外部程序生成特征文件时使用 //YSP文件特征配置相关参数用于调用外部程序生成特征文件时使用

View File

@@ -365,17 +365,33 @@ replace_zone_key=zone
replace_substitute_key=substitute replace_substitute_key=substitute
#样例文件上传的uri关键词 #样例文件上传的uri关键词
sample_upload_url_keyword=/av sample_upload_url_keyword=/av
digest_upload_url_keyword=/fileTransfer digest_upload_url_keyword=/filetransfer
#样例和摘要文件大小类型设置
sample_file_type=,mp3,mp4,flv,ivf,mp2v,jpg, #sample File Size 12M 12582912
#10M 10485760
sample_single_file_max_size=10485760
#12M 12582912
sample_total_file_max_size=12582912 sample_total_file_max_size=12582912
#audio File Types
audio_file_type=,wav,ape,ram,mp3,flac,midi,wma,aif,au,aac,mmf,amr,
#audio File Size 10M 10485760single
audio_single_file_max_size=10485760
#video File Types
video_file_type=,mp3,mp4,flv,ivf,mp2v,
#video File Size 10M 10485760single
video_single_file_max_size=10485760
#picture File Types
picture_file_type=,bmp,gif,jpg,pic,png,tif,
#picture File Size 10M 10485760single
picture_single_file_max_size=10485760
#voip File Types
voip_file_type=,mp3,mp4,flv,ivf,mp2v,jpg,
#voip File Size 10M 10485760single
voip_single_file_max_size=10485760
#digest File Types
digest_file_type=,txt,doc,img,docx,pptx,xlsx,xls,ppt, digest_file_type=,txt,doc,img,docx,pptx,xlsx,xls,ppt,
#10M10485760 #digest File Size 10M 10485760single
digest_single_file_max_size=10485760 digest_single_file_max_size=10485760
#12M12582912 #digest File Size 12M 12582912total
digest_total_file_max_size=12582912 digest_total_file_max_size=12582912
#YSP文件保存路径 #YSP文件保存路径
#av_file_path=/home/ysp/ #av_file_path=/home/ysp/