效验文件后缀及其流后缀 是否验证;文件大小
摘要:
文件验证是一项重要的任务,用于确保用户上传的文件符合预期并安全可用。以下是几个关键的验证方面:
- 文件后缀验证: 验证文件后缀是一种最常见的检查,确保上传的文件类型与您预期的类型相匹配。但是,应该注意的是,文件后缀可能被伪造,因此此项验证不能单独作为唯一标准。
- 文件内容验证: 检查文件的内容是否与其声明的文件类型相符,而不仅仅是文件后缀。这可以通过读取文件的特定字节、魔数(magic number)或文件头信息来实现。
- 文件大小验证: 控制上传文件的大小是很重要的。过大的文件可能会影响系统性能,甚至造成拒绝服务攻击。应该设置最大文件大小限制,并在上传时进行验证。
- 文件类型白名单: 为了增加安全性,您可以创建一个文件类型的白名单,仅允许特定类型的文件上传。这有助于防止恶意文件上传。
- 防病毒扫描: 对上传的文件进行病毒扫描,确保文件不包含恶意软件。
- 安全文件存储: 将上传的文件存储在安全的位置,确保不会被他人访问或操纵。
- 记录和日志: 记录上传的文件信息,以便追踪和审查。这对于处理潜在的问题和追溯非法操作很有帮助。
- HTTPS传输: 如果上传过程涉及网络传输,确保使用HTTPS协议,以加密传输的数据,防止数据被窃取。
综合考虑这些因素,您可以创建一个健壮的文件验证流程,以保障系统的安全性和稳定性。
博主 默语带您 Go to New World.
✍ 个人主页—— 默语 的博客👦🏻
《java 面试题大全》
🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭
《MYSQL从入门到精通》数据库是开发者必会基础之一~
🪁 吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄之助。苟未尽善尽美,敬请批评指正,以资改进。!💻⌨
1.开始调用初始接口类
this.fileValidata(fileName, uploadFile);
调用接口
// 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,无法上传");
}
}
效验文件后缀及其流后缀 是否验证
1.开始调用初始接口类
this.fileValidata(fileName, uploadFile);
调用接口
// 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,无法上传");
}
}
如对本文内容有任何疑问、建议或意见,请联系作者,作者将尽力回复并改进📓;(联系微信:Solitudemind )