文件上传:增加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;
import static java.lang.String.format;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
@@ -38,17 +36,19 @@ import com.nis.exceptions.MultiPartNewException;
import com.nis.util.Configurations;
import com.nis.util.Constants;
import com.nis.util.FileUtils;
import com.nis.util.StringUtil;
public class MultipartFileIntercepter extends CommonsMultipartResolver{
Logger logger = Logger.getLogger(MultipartFileIntercepter.class);
private Integer functionId=0;
protected CommonsFileUploadSupport.MultipartParsingResult parseRequest(HttpServletRequest request)throws MultipartException{
String encoding = determineEncoding(request);
//是否是样例文件
boolean isSampleFileUpload = request.getRequestURI().contains(Constants.SAMPLE_UPLOAD_URL_KEYWORD);
boolean isDigestFileUpload = request.getRequestURI().contains(Constants.DIGEST_UPLOAD_URL_KEYWORD);
//样例文件URI
boolean isSampleFileUpload = request.getRequestURI().toLowerCase().contains(Constants.SAMPLE_UPLOAD_URL_KEYWORD);
//摘要文件URI
boolean isDigestFileUpload = request.getRequestURI().toLowerCase().contains(Constants.DIGEST_UPLOAD_URL_KEYWORD);
FileUpload fileUpload = this.prepareFileUpload(encoding,isSampleFileUpload,isDigestFileUpload);
long fileUploadTotalSize=0l;
Properties languageProp=getMsgProp();
@@ -67,7 +67,7 @@ public class MultipartFileIntercepter extends CommonsMultipartResolver{
? ((UploadContext) ctx).contentLength()
: contentLengthInt;
// CHECKSTYLE:ON
logger.error("上传文件总大小为"+fileUploadTotalSize);
logger.info("上传文件总大小为"+fileUploadTotalSize);
/*****************预先获取上传文件的总的大小************/
//验证文件总大小
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{
String errorInfo="";
String fileType="";
String fileTypes="";
long fileMaxSize=0l;
if(isSampleFileUpload){
fileType=Constants.SAMPLE_FILE_TYPE;
fileMaxSize=Constants.SAMPLE_SINGLE_FILE_MAX_SIZE;
}else{
fileType=Constants.DIGEST_FILE_TYPE;
if(functionId.equals(52)){ //digest
fileTypes=Constants.DIGEST_FILE_TYPE;
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()) {
MultipartFile file= multipartFile.getFirst(fileName);
//文件类型错误
if(fileType.indexOf(","+FileUtils.getSuffix(file.getOriginalFilename(), false)+",") == -1){
throw new MultiPartNewException(errorInfo,file.getOriginalFilename(),fileType.substring(0,fileType.length()-1).substring(1),prop,null);
if(fileTypes.indexOf(","+FileUtils.getSuffix(file.getOriginalFilename(), false)+",") == -1){
throw new MultiPartNewException(errorInfo,file.getOriginalFilename(),fileTypes.substring(0,fileTypes.length()-1).substring(1),prop,null);
}
if(file.getSize() > fileMaxSize){
throw new MultiPartNewException(errorInfo, file.getOriginalFilename(), file.getSize(), fileMaxSize,prop, null);
@@ -203,6 +217,9 @@ public class MultipartFileIntercepter extends CommonsMultipartResolver{
if (curParam == null) {
// simple form field
multipartParameters.put(fileItem.getFieldName(), new String[] {value});
if(fileItem.getFieldName().toLowerCase().equals("functionid")){
functionId=StringUtil.isEmpty(value) ? 0:Integer.parseInt(value);
}
}
else {
// 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 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 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 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 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_TOTAL_FILE_MAX_SIZE = Configurations.getLongProperty("digest_total_file_max_size",52428800l);//50M
//YSP文件特征配置相关参数用于调用外部程序生成特征文件时使用