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

摘要:

文件验证是一项重要的任务,用于确保用户上传的文件符合预期并安全可用。以下是几个关键的验证方面:

  1. 文件后缀验证: 验证文件后缀是一种最常见的检查,确保上传的文件类型与您预期的类型相匹配。但是,应该注意的是,文件后缀可能被伪造,因此此项验证不能单独作为唯一标准。
  2. 文件内容验证: 检查文件的内容是否与其声明的文件类型相符,而不仅仅是文件后缀。这可以通过读取文件的特定字节、魔数(magic number)或文件头信息来实现。
  3. 文件大小验证: 控制上传文件的大小是很重要的。过大的文件可能会影响系统性能,甚至造成拒绝服务攻击。应该设置最大文件大小限制,并在上传时进行验证。
  4. 文件类型白名单: 为了增加安全性,您可以创建一个文件类型的白名单,仅允许特定类型的文件上传。这有助于防止恶意文件上传。
  5. 防病毒扫描: 对上传的文件进行病毒扫描,确保文件不包含恶意软件。
  6. 安全文件存储: 将上传的文件存储在安全的位置,确保不会被他人访问或操纵。
  7. 记录和日志: 记录上传的文件信息,以便追踪和审查。这对于处理潜在的问题和追溯非法操作很有帮助。
  8. 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 )

HTML、CSS和JavaScript可以配合使用实现登录注册功能。其中,HTML负责页面结构和内容,CSS负责页面样式,JavaScript负责页面交互和逻辑。一般情况下,登录注册需要与后端进行交互,以便验证用户输入的信息是否正确。 在HTML中,可以使用form标签来创建表单,通过input标签创建输入框等元素,使用户可以输入信息。在CSS中,可以对表单进行样式设置,美化表单的外观。在JavaScript中,可以通过获取表单元素的值,进行信息的校验和提交等操作。 为了显示文件后缀名,可以使用JavaScript来获取上传文件文件名,并从中提取出文件后缀名。具体实现方法可以参考以下代码: ```html <!DOCTYPE html> <html> <head> <title>Login/Register</title> <style> /* CSS 样式 */ input[type="text"], input[type="password"] { width: 100%; padding: 12px 20px; margin: 8px 0; display: inline-block; border: 1px solid #ccc; box-sizing: border-box; } input[type="submit"] { background-color: #4CAF50; color: white; padding: 14px 20px; margin: 8px 0; border: none; cursor: pointer; } input[type="submit"]:hover { background-color: #45a049; } </style> </head> <body> <h1>Login/Register</h1> <form action="#" method="post"> <label for="username">Username:</label><br> <input type="text" id="username" name="username" required><br> <label for="password">Password:</label><br> <input type="password" id="password" name="password" required><br> <label for="avatar">Avatar:</label><br> <input type="file" id="avatar" name="avatar" onchange="showFileName()"><br> <input type="submit" value="Submit"> </form> <script> // JavaScript 代码 function showFileName() { var fileInput = document.getElementById("avatar"); var fileName = fileInput.value.split("\\").pop(); // 获取文件名并去除路径 var fileExt = fileName.split(".").pop(); // 获取文件后缀名 alert("File name: " + fileName + ", File extension: " + fileExt); } </script> </body> </html> ``` 以上代码实现了一个简单的登录注册页面,并提供了一个上传头像的功能。在上传头像时,通过JavaScript获取文件名并从中提取出文件后缀名,并通过alert函数显示出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

默 语

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值