You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测用户上传的是1C导出的新xls文件而非修改后的旧文件

可选检测方案

1. 基于1C导出文件的固有特征校验

1C导出的xls/xlsx文件有固定生成规则,手动修改保存后会破坏这些特征,完全可以通过JS直接读取判断,无需访问用户本地文件系统:

  • 校验文件元数据:用xlsx等前端处理库读取文件内置元信息,1C导出的文件创建者、生成应用程序字段都会带1C:Enterprise相关的固定标识,用户用本地Excel/WPS修改保存后,这些字段会被替换成本地账号名、Microsoft Excel等非1C的标识,只要匹配不到固定标识即可判定为修改过的旧文件。
  • 定制导出标识:要求1C导出库存文件时,在隐藏单元格、隐藏Sheet或者文件自定义属性中写入每次导出的唯一时间戳/流水号,用户手动修改旧文件时基本不会注意到这些隐藏内容,一旦校验不到合法的标识,或者标识属于已经校验过的历史批次,直接拦截。
  • 校验固定结构:1C导出的库存表一般有固定的表头顺序、隐藏备注行、固定Sheet名,手动修改过的文件大概率会破坏这些结构,匹配失败即可判定为非官方导出文件。

2. 后端留存历史特征比对

每次用户上传文件后,后端留存该文件的特征值,二次上传时直接校验:

  • 首次上传错误文件时,后端计算文件哈希值(MD5/SHA256均可)存储,用户后续上传时先计算新文件的哈希,和历史错误文件的哈希匹配,命中就直接提示必须从1C重新导出。
  • 如果担心用户修改部分内容导致哈希变化,可以专门提取1C导出时自带的全局唯一字段做比对,比如导出时间、导出批次号,只要这个字段属于已经反馈过错误的历史批次,就判定为旧文件。

3. 最后修改时间辅助校验

虽然拿不到文件创建时间,但可以结合业务逻辑用JS能拿到的最后修改时间做辅助判断:

  • 你给用户反馈错误的时间点会存在后端,用户修改数据库后重新导出的文件,最后修改时间必然晚于错误反馈时间,如果上传文件的最后修改时间早于这个时间点,直接判定为旧文件。
  • 补充限制:要求用户导出文件后10分钟内上传,正常导出上传的时间差不会超过这个范围,进一步降低误判概率。

内容的提问来源于stack exchange,提问作者Артем Афонин

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 02:42:01