效验文件后缀及其流后缀 是否验证

  • 1.开始调用初始接口类
    • 调用接口
    • 工具类
    • FileTypeUtil 工具类
  • 2.文件大小控制
    • 工具类

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-addFILE_TYPE_MAP.put("ffd8ffe1", "jpg"); // JPEGFILE_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"); //cssFILE_TYPE_MAP.put("696b2e71623d696b2e71", "js"); //jsFILE_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. 文件上传漏洞 随便贴一个实战演示 BUU Upload(文件上传,过滤后缀,另类一句话) write up

    http://39.96.86.88/2020/04/03/ write up 文件上传 write up 文件上传 0x01 文件上传绕过 1.客户端js检查绕过 原理:客户端通过js检查提交的文件 ...

  2. python 读取当前文件夹下所有后缀为.lib文件

    # -*- coding: utf-8 -*-import os''' def file_name(file_dir):for root, dirs, files in os.walk(file_di ...

  3. IOl:从文件夹中找到后缀名为TXT的文件,然后复制到指定的文件夹

    /*** 从文件夹中找到后缀名为TXT的文件,然后复制到指定的文件夹* @param args* @throws IOException*/public static void main(String ...

  4. node文件通过不同的后缀名解析不同的文件类型

    node文件通过不同的后缀名解析不同的文件类型 导入不同的类型去辨别 上面是写死的,建议使用下面的方式 首先准备各种文件后缀的json文件,资源里面有 其次封装一个通用模块 const fs =req ...

  5. android安装程序后缀,【单选题】Android安装包文件简称APK,其后缀名是() A. .apk B. .exe C. .txt D. .app...

    [单选题]Android安装包文件简称APK,其后缀名是() A. .apk B. .exe C. .txt D. .app 更多相关问题 要在Excel 作表区域A1:A10中输入等比数列2.4.8 ...

  6. python找出某个文件夹下某个后缀的文件

    python找出某个文件夹下某个后缀的文件 import osdef find_files_with_suffix(folder_path, suffix):# 使用os模块获取文件夹中所有文件的路径 ...

  7. python获取文件夹下指定后缀名文件列表(可手工设定是否遍历子文件夹)cmd复制文件命令使用

    打算写一个替换文件的程序,该文件可能在不同文件夹路径,使用python操作肯定最方便,特此简单整理封装了两个python函数和一个cmd复制文件的命令方法,供自己翻阅或来者参考 辉 2022.8.9. ...

  8. c语言;文件名批量修改要求可以修改整个文件内文件名或后缀名自动,Python批量修改文件名...

    处理语料库时,有些文件名字很不规则,为了方便处理,同义按数字顺序修改名称,主要是用到os模块: import os def RenameFiles(srcdir): #将目录下所有的文件命名为数字开头 ...

  9. 一秒批量修改文件扩展名(后缀名)

    已经能正常查看到文件后缀名了,如果要修改文件后缀名,扩展名很简单直接选择文件,右键重命名.或者按住键盘"F2"键,进行修改. 这是针对单个文件的操作方法,但是文件过多就单个修改的工 ...

最新文章

  1. 《C++代码设计与重用》——1.2 重用的神话
  2. C 回顾 volatile 和 register 修饰符
  3. BZOJ2243: [SDOI2011]染色
  4. [论文阅读] Learning Loss for Active Learning
  5. matlab 运算子图_PHP运算子
  6. 在Spring+Hibernate项目中使用原生SQL进行查询和执行SQL处理
  7. 设计模式(JAVA)——Facade模式
  8. python 批量打印PDF(转)
  9. vue2中监听watch的写法汇总
  10. windows 7 开机错误 未能连接到一个Windows服务
  11. 左声道,右声道和立体声
  12. 基于PHP的校园留言板系统(带后台管理)
  13. 使用 scoped-slot 去设置缩略图模版,成功上传图片之后回显,在进行编辑,保存成功,但是报错
  14. Neo4j【有与无】【N1】介绍
  15. 可能是历史上最伟大的一次 Git 代码提交
  16. ios .mm文件调用c语言函数报错,深入浅出 iOS 编译
  17. vardict使用说明
  18. 常见拉丁文读法,肯定用得着~
  19. 联想小新 Pad Plus 2023 款评测
  20. RestTemplate请求Could not extract response: no suitable HttpMessageConverter found for response type..

热门文章

  1. [游泳] 学习蛙泳过程用到的一些资料
  2. 计算机系统损坏什么原因,电脑系统坏了怎么办
  3. G. Counting Shortcuts
  4. 微信小程序-炫酷手持滚动弹幕生成小工具
  5. 鸿蒙上线发布会,华为6月2日线上新品发布会开启-鸿蒙系统正式上线
  6. Spring boot 用mybatis连接数据库
  7. 软考含金量大么?考软考有什么用呢?
  8. Matlab转Python问题:一些图像图像处理相关函数的对应
  9. iOS小技能:iOS13 证件扫描 文字识别API
  10. URL definition