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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 效验文件后缀及其流后缀 是否验证;文件大小

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,无法上传");
    }
  }


相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
6月前
|
Windows
推荐:如何批量根据PDF文件名批量查找PDF文件,复制到指定地方保存,通过文件名批量复制文件,按照文件名批量复制文件,根据文件名批量提取文件
该文介绍了一个批量查找PDF文件(不限于找PDF)的工具,用于在多级文件夹中快速查找并复制特定文件。通过下载提供的软件,用户可以加载PDF库,输入文件名列表,设置操作参数(如保存路径、复制或删除)及搜索模式。软件能高效执行,例如在1.1秒内完成对数千文件中的37个目标文件的复制,显著提升了工作效率,避免了手动逐个查找和复制的繁琐。
594 0
|
6月前
|
存储 定位技术 Python
批量将文件名称符合要求的文件自动复制到新文件夹:Python实现
批量将文件名称符合要求的文件自动复制到新文件夹:Python实现
101 2
|
6月前
|
存储 C语言 C++
C++遍历文件夹获取各文件名称并筛选指定格式类型的文件或具有特定名称的文件
C++遍历文件夹获取各文件名称并筛选指定格式类型的文件或具有特定名称的文件
126 1
|
安全 Java 应用服务中间件
从任意文件读取到拿webshell
从任意文件读取到拿webshell
方法:怎么将手机号改成vcf格式?
第(1)步:首先你在电脑上打开软件(金芝号码提取导入助手),然后你在电脑上准备好你的号码,号码一个一行一列,把它们复制粘贴到软件的功能模块“导入通讯录”。第(2)步:然后再点软件下方的“转化通讯录”,就可以得到一个vcf文件了,也就是把号码改成了vcf格式。第(3)步:你再把这个vcf文件,从电脑上发给你的手机,在手机上打开,就可以把号码一次性导入通讯录。以上便是:怎么将手机号改成vcf格式?的方法。细节:如果你只有号码,没有姓铭,那么需要复制号码粘贴到软件上的姓铭框那里,号码作为铭字。也就是放两遍号码就可以了。
方法:怎么将手机号改成vcf格式?
批量修改文件名后缀,并批量将本地图片保存到word中
批量修改文件名后缀,并批量将本地图片保存到word中
批量修改文件名后缀,并批量将本地图片保存到word中
|
Java 数据安全/隐私保护 C++
windows环境实现批量加密文件,并创建加密文件同名(不带后缀)的文件夹,然后把加密文件和图片和文本放入这个文件夹。
windows环境实现批量加密文件,并创建加密文件同名(不带后缀)的文件夹,然后把加密文件和图片和文本放入这个文件夹。
224 0
windows环境实现批量加密文件,并创建加密文件同名(不带后缀)的文件夹,然后把加密文件和图片和文本放入这个文件夹。
|
Web App开发 存储
艾伟_转载:下载文件时根据MIME类型自动判断保存文件的扩展名
引言 用WebClient下载远程资源时,经常会遇到类似这样的网址: http://www.uushare.com/filedownload?user=icesee&id=2205188 http://www.guaishow.com/u/luanfujie/g9675/ 我们不知道这个Url具体代表的是一个网页,还是某种类型的文件。
872 0