0

0

HTML5怎样设置上传文件大小_HTML5文件大小设置方案【规则】

雪夜

雪夜

发布时间:2026-01-17 18:25:40

|

833人浏览过

|

来源于php中文网

原创

HTML5上传前限制文件大小需在input的change事件中用JavaScript读取file.size判断,accept属性仅限类型无法限制大小;后端必须校验,因前端限制可被绕过。

html5怎样设置上传文件大小_html5文件大小设置方案【规则】

HTML5 上传前如何限制文件大小(input[type="file"]

HTML5 本身不提供原生的「服务端式」上传大小拦截,但可以通过 input 元素的 accept 属性配合 JavaScript 的 files API,在用户选择文件后、提交前立刻检查大小,避免无效上传。这是最常用且必须的第一道防线。

  • accept 属性只过滤文件类型(如 accept="image/*"),**完全不能限制大小**,别被误导
  • 真正起作用的是读取 event.target.files[0].size(单位是字节)
  • 必须在 change 事件中检查,不能等到表单 submit 才做——否则用户可能已选中数 GB 视频却毫无提示
  • 注意:Safari 旧版本(≤14.1)对 files 对象的 size 支持稳定,但某些 iOS WebView 可能返回 0;建议加兜底判断 if (!file || !file.size)
document.getElementById('upload').addEventListener('change', function(e) {
  const file = e.target.files[0];
  if (!file) return;
  const maxSize = 5 * 1024 * 1024; // 5MB
  if (file.size > maxSize) {
    alert(`文件不能超过 ${maxSize / 1024 / 1024}MB`);
    e.target.value = ''; // 清空 input,否则重复触发 change 时不会再次触发
  }
});

后端必须校验:为什么前端限制只是“友好提示”

前端限制可被绕过(禁用 JS、修改 DOM、用 curl 直传),所以服务端校验是强制要求。不同后端环境的配置点差异大,但核心逻辑一致:拒绝接收超过阈值的请求体。

  • Node.js + Express:需配合 multer 中间件的 limits.fileSize 选项,而非仅靠 req.headers['content-length']
  • PHP:检查 $_SERVER['CONTENT_LENGTH'] 并与 upload_max_filesizepost_max_size ini 设置比对
  • Nginx:设置 client_max_body_size 10M;,否则请求根本到不了后端,直接返回 413 Request Entity Too Large
  • 注意:Nginx 的 client_max_body_size 必须 ≥ 后端框架允许的最大值,否则前端限制再严也无意义

常见错误:表单提交后才发现 413 或超时

这不是代码写错了,而是前后端限制没对齐或缺少中间层反馈。典型表现是用户点上传后页面卡住几秒,最后跳 413 或白屏。

  • 前端没监听 input[type="file"]change,只靠后端报错,体验极差
  • 后端返回 413 时没配好 Nginx 的 error_page 413,导致用户看到默认 Nginx 错误页,而非友好提示
  • 使用 AJAX 上传时,没处理 XMLHttpRequest.upload.onprogress 的早期失败(比如服务端中途断连),误以为是网络问题
  • 移动端 WebView(尤其 Android 低版本)可能不触发 change 事件,建议加按钮点击触发 click() 模拟,并监听 inputchange 双事件

进阶方案:分片上传 + 前端哈希校验(大文件场景)

当业务明确需要支持 >100MB 文件时,单纯限制大小已不够,得换架构。此时重点不是“设上限”,而是“可控上传”。

立即学习前端免费学习笔记(深入)”;

  • File.prototype.slice() 分块读取,每块控制在 2–5MB,规避单次请求超限
  • 上传前用 FileReader + SparkMD5 算哈希,实现秒传(服务端先查哈希是否存在)
  • 服务端需支持接收分片、合并、校验完整文件大小(比如合并后 stat 文件再比对)
  • 注意:Safari 对 Blob.slice() 返回的 Blob 类型处理有兼容性问题,建议统一用 new Blob([blob], {type: blob.type}) 包一层

真正的难点不在“怎么设大小”,而在“用户选了 2GB 文件却以为马上能传完”——这时候前端限制只是止痛药,分片才是手术刀。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2622

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1628

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1510

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

952

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1418

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1234

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1447

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1306

2023.11.13

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

42

2026.01.16

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
极致CMS零基础建站教学视频
极致CMS零基础建站教学视频

共62课时 | 5.4万人学习

如何进行WebSocket调试
如何进行WebSocket调试

共1课时 | 0.1万人学习

传智播客AJAX视频教程
传智播客AJAX视频教程

共31课时 | 6.1万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号