讲师中心 微信公众号
AI工具推荐 视频效率加速

layui upload怎么设置上传文件的扩展名白名单限制

阿芳大大_3291

阿芳大大_3291

发布时间:2026-11-08 07:19:38

|

964人浏览过

|

来源于php中文网

原创

exts参数必须用竖线分隔、全小写、不带点,仅做文件名后缀字符串匹配,不校验文件内容;需与accept和acceptMime配合使用才具备完整安全控制能力。

layui upload怎么设置上传文件的扩展名白名单限制

exts 参数必须用竖线分隔且小写,不能带点

layui 的 exts 只做文件名后缀的字符串匹配,不读文件内容。它要求你写的值是纯小写、不含 .、用 | 连接的字符串,比如 exts: 'pdf|docx|xlsx'。写成 exts: 'PDF|.pdf' 或 exts: 'pdf, docx' 都会失效。

常见错误现象:用户仍能选中 .exe 文件,或拖入 .zip 后出现在预览列表里 —— 因为 exts 本身不控制文件选择框,只在选完后校验;它也不区分大小写,但匹配逻辑是严格字符串相等,所以大小写不一致就绕过了。

使用场景举例:

  • 只允许上传 PDF 和 Excel:exts: 'pdf|xlsx'
  • 支持多种图片格式:exts: 'jpg|jpeg|png|gif|webp'
  • ZIP/RAR/7z 压缩包:exts: 'zip|rar|7z'

accept + acceptMime 才真正影响系统弹窗可见文件

accept 本身只是个开关,只能设为 "images"、"file"、"video"、"audio" 四个固定值,它不识别具体后缀。真正让 Windows/macOS 文件选择框只显示 PDF 的,是 acceptMime。

例如想让用户点“选择文件”时只看到 PDF:

  • accept: 'file'(必须配,否则 acceptMime 不生效)
  • acceptMime: 'application/pdf'(注意不是 pdf 或 file/pdf)

多个类型用逗号+空格分隔:acceptMime: 'application/pdf, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'。Safari 对 WebP 支持弱,建议写成 image/webp, image/x-webp。

兼容性影响:Chrome 最全,Firefox 次之,Safari 最保守。上线前务必实测目标浏览器弹窗是否真过滤。

exts 单独用没用,必须和 acceptMime 配合才完整

只设 exts: 'pdf',用户依然能在文件选择框里看到并选中 report.txt —— 因为 acceptMime 没配,默认还是 accept: 'images',系统根本没过滤文本类文件。

深蓝色网站后台管理系统layui框架模板-AdminPro
深蓝色网站后台管理系统layui框架模板-AdminPro

一款深蓝色网站后台管理系统layui框架模板

下载

只设 acceptMime: 'application/pdf' 但漏了 accept: 'file',某些版本 Layui 会忽略该配置,弹窗恢复显示全部文件。

推荐最小安全组合:

  • accept: 'file'
  • acceptMime: 'application/pdf'
  • exts: 'pdf'

三者缺一不可:acceptMime 控制系统级可见性,exts 提供前端二次校验和提示,accept 是 acceptMime 生效的前提。

before 回调里才能读真实 MIME 类型,防文件名伪装

用户把 hack.exe 改成 document.pdf,exts 和 acceptMime 都会放行。这时唯一能拿到浏览器推测的 MIME 类型(file.type)的地方,是 before 回调。

示例:拒绝 type 不是 application/pdf 的 “PDF” 文件:

before: function(obj) {
  var files = obj.getChooseFiles();
  if (files.length && files[0].type !== 'application/pdf') {
    layer.msg('请上传真实的 PDF 文件', {icon: 2});
    return false;
  }
}

注意:file.type 由浏览器根据文件头或扩展名推测,不可全信,但比 exts 强得多。如需精确校验(比如确认 ZIP 是否真为 ZIP),得用 FileReader 读前 4 字节比对 magic number。

真正容易被忽略的是:before 返回 false 才能同步阻断,choose 里 return 无效;而且多文件上传时,只要一个文件不满足,整批都会被拦下 —— 你甚至拿不到完整的 obj.getChooseFiles() 列表。

热门AI工具

更多
Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2883

2023.08.11

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

6303

2023.10.09

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

7210

2024.03.19

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

7038

2024.03.22

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

1003

2024.05.22

ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

3340

2023.06.14

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

360

2023.08.31

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3153

2023.11.15

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Layui 快速入门精讲
Layui 快速入门精讲

共5课时 | 1.6万人学习

ThinkPHP配置开发与CMS后台实战
ThinkPHP配置开发与CMS后台实战

共87课时 | 13.2万人学习

第二十三期_综合实战
第二十三期_综合实战

共89课时 | 11.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn