文件上传:增加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;
|
||||
|
||||
|
||||
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
|
||||
|
||||
@@ -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文件特征配置相关参数,用于调用外部程序生成特征文件时使用
|
||||
|
||||
Reference in New Issue
Block a user