文件上传:增加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:
@@ -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
|
||||||
|
|||||||
@@ -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文件特征配置相关参数,用于调用外部程序生成特征文件时使用
|
||||||
|
|||||||
@@ -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 10485760(single)
|
||||||
|
audio_single_file_max_size=10485760
|
||||||
|
#video File Types
|
||||||
|
video_file_type=,mp3,mp4,flv,ivf,mp2v,
|
||||||
|
#video File Size 10M 10485760(single)
|
||||||
|
video_single_file_max_size=10485760
|
||||||
|
#picture File Types
|
||||||
|
picture_file_type=,bmp,gif,jpg,pic,png,tif,
|
||||||
|
#picture File Size 10M 10485760(single)
|
||||||
|
picture_single_file_max_size=10485760
|
||||||
|
#voip File Types
|
||||||
|
voip_file_type=,mp3,mp4,flv,ivf,mp2v,jpg,
|
||||||
|
#voip File Size 10M 10485760(single)
|
||||||
|
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 10485760(single)
|
||||||
digest_single_file_max_size=10485760
|
digest_single_file_max_size=10485760
|
||||||
#12M12582912
|
#digest File Size 12M 12582912(total)
|
||||||
digest_total_file_max_size=12582912
|
digest_total_file_max_size=12582912
|
||||||
#YSP文件保存路径
|
#YSP文件保存路径
|
||||||
#av_file_path=/home/ysp/
|
#av_file_path=/home/ysp/
|
||||||
|
|||||||
Reference in New Issue
Block a user