1.开始调用初始接口类
this.fileValidata(fileName, uploadFile); • 1
调用接口
// fileName 文件名字 uploadFile 文件流 private void fileValidata(String fileName, MultipartFile uploadFile) { try { int index = fileName.lastIndexOf("."); String ext = fileName.substring(index + 1).toLowerCase(Locale.CHINA); if (!IdaConstants.EXCEL_XLS.equals(ext) && !IdaConstants.EXCEL_XLSX.equals(ext) && !IdaConstants.EXCEL_CSV.equals(ext)) { throw new ServiceException("上传文件格式必须为xls/xlsx/GVS!"); } //暂时未找到csv文件头此处csv验证跳过 if (!ext.equals(IdaConstants.EXCEL_CSV)) { String postfix = FileTypeUtil.getFileType(uploadFile); if (!IdaConstants.EXCEL_XLS.equals(postfix) && !IdaConstants.EXCEL_XLSX.equals(postfix)&& !IdaConstants.EXCEL_CSV.equals(postfix)) { throw new ServiceException("上传文件格式必须为xls/xlsx/GVS!"); } } } catch (Exception ex) { throw new ServiceException(ex.getMessage()); } }
工具类
public interface IdaConstants { /** * 前后端传递的token名称 */ String SESSION_TOKEN_NAME = "token"; /** * 前后端传递的mac名称 */ String SESSION_MAC_NAME = "_s"; /** * 树形结构数据,根节点父ID */ Long TREE_ROOT_ID = -1L; /** * 项目通用字典:是 */ String YES = "1"; /** * 项目通用字典:否 */ String NO = "2"; /** * 会话key前缀 */ String TOKEN_PREFIX = "IDA:TOKEN:"; /** * 用户MAC配置前缀 */ String MAC_PREFIX = "IDA:MAC:"; /** * 数据状态1:正常2未启用3停用 */ String DATA_STATUS_NOMAL = "1"; // **审计日志相关常量定义 ---开始 **// /** * 操作结果--成功 */ String ACCESS_STAS_SUCESS = "1"; /** * 操作结果--失败 */ String ACCESS_STAS_FAILED = "2"; /** * 事件类型--业务事件 */ String LOG_TYPE_BUSI = "1"; /** * 事件类型--系统事件 */ String LOG_TYPE_SYS = "2"; /** * 事件等级--低 */ String LOG_LEVEL_LOW = "1"; /** * 事件等级--中 */ String LOG_LEVEL_MIDDLE = "2"; /** * 事件等级--高 */ String LOG_LEVEL_HIGH = "3"; /** * 操作类型字典编码 */ String ACTION_TYPE_CODE = "action_type"; /** * 操作结果字典编码 */ String ACCESS_STATUS_CODE = "access_status"; /** * 日志类型字典编码 */ String LOG_TYPE_CODE = "log_type"; /** * 日志等级字典编码 */ String LOG_LEVEL_CODE = "log_level"; // **审计日志相关常量定义 ---结束 **// /** * 导出的最大条数限制 */ int MAX_EXPORT_ROWS = 1000000; // **数据库相关常量定义 ----开始**// /** * 数据源类型 1:jdbc */ String DB_CLASS_JDBC = "1"; /** * 数据源类型2:静态文件 */ String DB_CLASS_STATIC = "2"; /** * 数据库类型1:mysql */ String DB_TYPE_MYSQL = "1"; /** * 数据库类型2:oracle */ String DB_TYPE_ORACLE = "2"; /** * 数据采集表前缀--静态文件 */ String DATA_TAB_PRE_STATIC = "data_s_"; /** * 数据采集表前缀--jdbc */ String DATA_TAB_PRE_JDBC = "data_j_"; /** * 是否有数据采集 1是2否 */ String HAS_GATHER_YES = "1"; /** * 是否有数据采集 1是2否 */ String HAS_GATHER_NO = "2"; /** * excel类型 .xls */ int EXCEL_TYPE_XLS = 1; /** * excel类型 .xlsx */ int EXCEL_TYPE_XLSX = 2; /** * excel类型 .CSV */ int EXCEL_TYPE_CSV = 3; /** * excel类型 xls */ String EXCEL_XLS = "xls"; /** * excel类型 xlsx */ String EXCEL_XLSX = "xlsx"; /** * excel类型 xlsx */ String EXCEL_CSV = "csv"; // **数据库相关常量定义 ----结束**// /** * 数据对象分类(数据源分类、指标分类等) */ String DATA_OBJ_CLS = "1"; /** * 数据对象(数据源、指标等) */ String DATA_OBJ = "2"; /** * sql过滤,字段间操作符-等于 */ String SQL_OPR_EQUALS = "1"; /** * sql过滤,字段间操作符-不等于 */ String SQL_OPR_NOT_EQUALS = "2"; /** * sql过滤,字段间操作符-小于 */ String SQL_OPR_LESS = "3"; /** * sql过滤,字段间操作符-小于等于 */ String SQL_OPR_LESS_EQ = "4"; /** * sql过滤,字段间操作符-大于 */ String SQL_OPR_GREATER = "5"; /** * sql过滤,字段间操作符-大于等于 */ String SQL_OPR_GREATER_EQ = "6"; /** * sql过滤,字段间操作符-介于 */ String SQL_OPR_BETWEEN = "7"; /** * sql过滤,字段间操作符-为空 */ String SQL_OPR_NULL = "8"; /** * sql过滤,字段间操作符-不为空 */ String SQL_OPR_NOT_NULL = "9"; /** * sql过滤,字段间操作符-包含 */ String SQL_OPR_LIKE = "10"; /** * sql过滤,字段间操作符-不包含 */ String SQL_OPR_NOT_LIKE = "11"; /** * sql过滤,字段间操作符-IN */ String SQL_OPR_IN = "12"; /** * sql聚合,求和 */ String SQL_GROUPBY_SUM = "1"; /** * sql聚合,求平均 */ String SQL_GROUPBY_AVERAGE = "2"; /** * sql聚合,最大 */ String SQL_GROUPBY_MAX = "3"; /** * sql聚合,最小 */ String SQL_GROUPBY_MIN = "4"; /** * sql聚合,计数 */ String SQL_GROUPBY_COUNT = "5"; /** 发布状态(1:是、2:否、3:撤销) start */ /** 1:是 */ String PUBLISHED_YES = "1"; /** 2:否 */ String PUBLISHED_NO = "2"; /** 3:撤销 */ String PUBLISHED_CANCEL = "3"; /** 4:分享 */ String PUBLISHED_SHARE = "4"; /** 发布状态(1是2否3撤销) end */ /** 状态(1:正常2:未启用3:停用) start */ /** 1:正常 */ String STATUS_NORMAL = "1"; /** 2:未启用 */ String STATUS_NOTENABLED = "2"; /** 3:停用 */ String STATUS_STOP = "3"; /** 状态(1:正常2:未启用3:停用) end */ /** * 维度 */ String COL_TYPE_DIM = "1"; /** * 度量 */ String COL_TYPE_MEAS = "2"; /** * 字段数据类型--日期 */ String DATA_TYPE_TIMESTAMP = "TIMESTAMP"; /** * 字段数据类型--字符串 */ String DATA_TYPE_VARCHAR = "VARCHAR"; /** * 字段数据类型--数字 */ String DATA_TYPE_NUMERIC = "NUMERIC"; /** 场景类型(1:本地场景2:远程场景) start */ /** 1:本地场景 */ String SCE_TYPE_LOCAL = "1"; /** 2:远程场景 */ String SCE_TYPE_REMOTE = "2"; /** 场景类型(1:本地场景2:远程场景) end */ /** * 不分页的情况下,限制查询吐出数量,最多查询100条 */ int DB_QUERY_MAX_DATA = 100; /** 消息类型(1:普通2:反馈3:分享4:系统) start */ /** 1:普通 */ String MSG_ORDINARY = "1"; /** 2:反馈 */ String MSG_FEEDBACK = "2"; /** 2:分享 */ String MSG_SHARING = "3"; /** 2:系统 */ String MSG_SYSTEM = "4"; /** 消息类型(1:普通2:反馈3:分享4:系统) end */ String RESTYPE_MUNE = "1"; String RESTYPE_BUTTON = "2"; /**表类型1:数据表2:SQL*/ String TABLE_TYPE_TAB = "1"; String TABLE_TYPE_SQL = "2"; /**日期组件名称**/ String COMP_TYPE_DATE = "date"; String COMP_TYPE_DATE_YEAR = "date_year"; /**下拉选择组件名称**/ String COMP_TYPE_SELECT = "select"; /**排序组件名称**/ String COMP_TYPE_SORT = "topAnddown"; /**场景缓存的前缀**/ String SCEBOX_CACHE_PREFIX = "SCEBOX_CACHE_PREFIX_"; String LKGINFO_LKG_COLID = "lkgColId"; String LKGINFO_LKG_VALUE = "lkgValue"; String LKGINFO_LKG_OPERATION = "lkgOperation"; /**操作日志模块名称**/ String DICTIONARY_MAINTENANCE = "字典维护"; String LOG_MANAGEMENT = "日志管理"; String SYSTEM_PARAMETER = "系统参数维护"; String TEMPLATE_LIBRARY = "模板库"; String COMPONENT_LIBRARY = "组件库"; String DOCUMENT_MANAGEMENGT = "文档管理"; String TYPICAL_SCENARIO = "典型场景管理"; String RESULTS_MANAGEMENGT = "成果管理"; String MULTI_PERSON = "多人协同场景"; String DATA_MANAGEMENGT = "数据管理"; String SCENE_MANAGEMENGT = "场景管理"; /**业务操作类型**/ //查询 String ACTION_QUERY = "1"; //修改|编辑 String ACTION_UPDATE = "2"; //删除 String ACTION_DELETE = "3"; //登录 String ACTION_LOGIN = "4"; //添加 String ACTION_INSTER = "5"; //备份 String ACTION_BACKUPS = "6"; //备份恢复 String ACTION_RECOVERY = "7"; //导出 String ACTION_EXPORT = "8"; //导入 String ACTION_IMPORT = "9"; //复制 String ACTION_COPY = "10"; //登出 String ACTION_LOGIN_OUT = "11"; //上传 String ACTION_UPLOAD = "12"; //下载 String ACTION_DOWN = "13"; }
FileTypeUtil 工具类
package com.aostar.ida.framework.util; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Iterator; import java.util.Locale; import java.util.Map; import org.springframework.web.multipart.MultipartFile; public class FileTypeUtil { private final static Map<String, String> FILE_TYPE_MAP = new HashMap<String, String>(); private FileTypeUtil() {} static { getAllFileType(); // 初始化文件类型信息 } private static void getAllFileType() { // ps工具生成JPEG格式-190722-add FILE_TYPE_MAP.put("ffd8ffe1", "jpg"); // JPEG FILE_TYPE_MAP.put("ffd8ffe000104a464946", "jpg"); // JPEG (jpg) FILE_TYPE_MAP.put("89504e470d0a1a0a0000", "png"); // PNG (png) FILE_TYPE_MAP.put("424d228c010000000000", "bmp"); // 16色位图(bmp) FILE_TYPE_MAP.put("424d8240090000000000", "bmp"); // 24位位图(bmp) FILE_TYPE_MAP.put("424d8e1b030000000000", "bmp"); // 256色位图(bmp) FILE_TYPE_MAP.put("47494638396126026f01", "gif"); // GIF (gif) FILE_TYPE_MAP.put("00000020", "mp4"); FILE_TYPE_MAP.put("0000001c", "mp4"); FILE_TYPE_MAP.put("00000018", "mp4"); FILE_TYPE_MAP.put("4F676753", "ogg"); FILE_TYPE_MAP.put("43575306", "swf"); FILE_TYPE_MAP.put("46575306", "swf"); FILE_TYPE_MAP.put("52617221", "rar"); FILE_TYPE_MAP.put("504b0304140000000800", "zip"); FILE_TYPE_MAP.put("255044462d312e350d0a", "pdf"); // Adobe Acrobat (pdf) FILE_TYPE_MAP.put("504B0304", "xlsx"); FILE_TYPE_MAP.put("d0cf11e0a1b11ae10000", "xls"); // FILE_TYPE_MAP.put("504B0304", "pptx"); FILE_TYPE_MAP.put("504b0304140006000800", "docx");// docx文件 FILE_TYPE_MAP.put("3c3f786d6c", "xml");// xml文件 FILE_TYPE_MAP.put("efbbbf3c3f786d6c", "xml");// xml文件 FILE_TYPE_MAP.put("49443303000000000f76", "mp3"); FILE_TYPE_MAP.put("49443303000000002176", "mp3"); FILE_TYPE_MAP.put("49492a00227105008037", "tif"); //TIFF (tif) FILE_TYPE_MAP.put("41433130313500000000", "dwg"); //CAD (dwg) FILE_TYPE_MAP.put("3c21444f435459504520", "html"); //HTML (html) FILE_TYPE_MAP.put("3c21646f637479706520", "htm"); //HTM (htm) FILE_TYPE_MAP.put("48544d4c207b0d0a0942", "css"); //css FILE_TYPE_MAP.put("696b2e71623d696b2e71", "js"); //js FILE_TYPE_MAP.put("7b5c727466315c616e73", "rtf"); //Rich Text Format (rtf) FILE_TYPE_MAP.put("38425053000100000000", "psd"); //Photoshop (psd) FILE_TYPE_MAP.put("46726f6d3a203d3f6762", "eml"); //Email [Outlook Express 6] (eml) FILE_TYPE_MAP.put("5374616E64617264204A", "mdb"); //MS Access (mdb) FILE_TYPE_MAP.put("252150532D41646F6265", "ps"); FILE_TYPE_MAP.put("255044462d312e360d25", "pdf"); //Adobe Acrobat (pdf) FILE_TYPE_MAP.put("2e524d46000000120001", "rmvb"); //rmvb/rm相同 FILE_TYPE_MAP.put("464c5601050000000900", "flv"); //flv与f4v相同 FILE_TYPE_MAP.put("000001ba210001000180", "mpg"); // FILE_TYPE_MAP.put("3026b2758e66cf11a6d9", "wmv"); //wmv与asf相同 FILE_TYPE_MAP.put("524946464694c9015741", "wav"); //Wave (wav) FILE_TYPE_MAP.put("52494646d07d60074156", "avi"); FILE_TYPE_MAP.put("4d546864000000060001", "mid"); //MIDI (mid) FILE_TYPE_MAP.put("526172211a0700cf9073", "rar"); FILE_TYPE_MAP.put("235468697320636f6e66", "ini"); FILE_TYPE_MAP.put("504b03040a0000000000", "jar"); FILE_TYPE_MAP.put("4d5a9000030000000400", "exe");//可执行文件 FILE_TYPE_MAP.put("3c25402070616765206c", "jsp");//jsp文件 FILE_TYPE_MAP.put("4d616e69666573742d56", "mf");//MF文件 FILE_TYPE_MAP.put("efbbbf2f2a0d0a53514c", "sql");//xml文件 FILE_TYPE_MAP.put("7061636b616765207765", "java");//java文件 FILE_TYPE_MAP.put("406563686f206f66660d", "bat");//bat文件 FILE_TYPE_MAP.put("1f8b0800000000000000", "gz");//gz文件 FILE_TYPE_MAP.put("6c6f67346a2e726f6f74", "properties");//bat文件 FILE_TYPE_MAP.put("cafebabe0000002e0041", "class");//bat文件 FILE_TYPE_MAP.put("49545346030000006000", "chm");//bat文件 FILE_TYPE_MAP.put("04000000010000001300", "mxp");//bat文件 FILE_TYPE_MAP.put("6431303a637265617465", "torrent"); FILE_TYPE_MAP.put("494d4b48010100000200", "264"); FILE_TYPE_MAP.put("6D6F6F76", "mov"); //Quicktime (mov) FILE_TYPE_MAP.put("FF575043", "wpd"); //WordPerfect (wpd) FILE_TYPE_MAP.put("CFAD12FEC5FD746F", "dbx"); //Outlook Express (dbx) FILE_TYPE_MAP.put("2142444E", "pst"); //Outlook (pst) FILE_TYPE_MAP.put("AC9EBD8F", "qdf"); //Quicken (qdf) FILE_TYPE_MAP.put("E3828596", "pwl"); //Windows Password (pwl) FILE_TYPE_MAP.put("2E7261FD", "ram"); //Real Audio (ram) FILE_TYPE_MAP.put("5265644c","pptx");//ppt、pptx } private static String bytesToHexString(byte[] src) { StringBuilder stringBuilder = new StringBuilder(); if (null == src || src.length <= 0) { return null; } for (int i = 0; i < src.length; i++ ) { int v = src[i] & 0xFF; String hv = Integer.toHexString(v); if (hv.length() < 2) { stringBuilder.append(0); } stringBuilder.append(hv); } return stringBuilder.toString(); } public static String getFileType(MultipartFile file) { InputStream fis = null; try { fis = file.getInputStream(); } catch (IOException e1) { return null; } if(null == fis){ return null; } String res = null; /// FileInputStream fis = null; try { // fis = new FileInputStream(file); byte[] b = new byte[6]; fis.read(b, 0, b.length); String fileCode = bytesToHexString(b); System.out.println("fileCode>>>"+fileCode); Iterator<String> keyIter = FILE_TYPE_MAP.keySet().iterator(); while (keyIter.hasNext()) { String key = keyIter.next(); if (key.toLowerCase(Locale.CHINA).startsWith(fileCode.toLowerCase(Locale.CHINA)) || fileCode.toLowerCase(Locale.CHINA).startsWith( key.toLowerCase(Locale.CHINA))) { res = FILE_TYPE_MAP.get(key); break; } } } catch (FileNotFoundException e) {} catch (IOException e) {} finally { // if (fis != null) { // try { // fis.close(); // } catch (IOException e) { // } // } } return res; } }
2.文件大小控制
MultipartFile uploadFile = getSingleFile(request); long size = 10; FileUtil.checkFileSize(uploadFile,size);
工具类
/** * Description:检查上传的文件大小是否超过指定值 */ public static void checkFileSize(MultipartFile file,long size){ long fileSize = file.getSize(); if(fileSize > size*1024*1024){ throw new ServiceException("文件大于10M,无法上传"); } }