当前位置:首页 > 知识 > 文件上传指定位置异常

文件上传指定位置异常

2026-10-17 05:46:51 [知识] 来源:力不从心网

上周三下午,文件位置运维群里炸了锅。上传一位同事上传产品手册到后台,指定进度条卡在99%,异常刷新页面后文件没了,文件位置服务器上对应的上传目录里只有个0字节的临时文件。他试了三次,指定三次都一样。异常我接手排查时发现,文件位置上传接口返回的上传HTTP状态码是200,但文件根本没落到指定位置。指定

这不是异常孤例。过去两个月,文件位置我陆续收到六起类似反馈,上传涉及图片、指定PDF和CSV三种格式。共同点是:文件小于5MB时一切正常,超过10MB就大概率失败。更诡异的是,失败时后端日志里连报错都没有——仿佛文件在传输途中被什么东西悄悄吃掉了。

先查Nginx配置。client_max_body_size设的是50MB,够用。再看PHP的upload_max_filesize和post_max_size,分别是64MB和80MB。表面看没问题。但当我用curl模拟上传一个12MB的文件时,发现请求体被截断了——Content-Length声明的是12MB,实际到达后端的只有不到8MB。中间少掉的4MB去哪了?

抓包分析后真相浮出水面。公司内网有一台老旧的WAF设备,它会对所有POST请求做内容检查。当检测到文件包含特定二进制特征(比如某些PDF的字体嵌入数据)时,WAF会主动丢弃后续数据包,但又不返回错误码。于是Nginx以为客户端断开了,PHP的$_FILES数组里error值为0,但tmp_name指向的文件不完整。后端代码只检查了error === UPLOAD_ERR_OK,没校验文件大小是否与Content-Length一致,直接move_uploaded_file,结果就是0字节或残缺文件。

这种问题最难查。因为所有常规检查点都显示“正常”。WAF的日志里只记录“策略匹配:文件内容过滤”,不记录具体丢弃了多少字节。Nginx的access_log里请求状态是200。PHP的error_log干干净净。你只能靠对比Content-Length和实际落盘大小来发现异常。

我后来在代码里加了一段校验:上传完成后,先filesize($_FILES['file']['tmp_name']),再和$_SERVER['CONTENT_LENGTH']做比较(注意要减去表单其他字段的长度)。如果不一致,直接返回500并记录原始长度和实际长度。这个改动上线后,同类问题再没漏报过。

但根本解决得靠运维。那台WAF已经服役七年,厂商早就不维护了。我们把它从上传链路上摘掉,换成了基于ModSecurity的新规则,只检查文件头而不做全量内容扫描。切换当晚,一个15MB的PSD文件上传成功,耗时4.2秒。之前它会在第3秒左右被静默截断。

如果你也遇到上传文件“消失”但日志无异常的情况,先别怀疑代码。拿curl -v看请求体是否完整到达,再对比服务端实际接收的字节数。中间任何一层——负载均衡、WAF、CDN、甚至某些杀毒软件的实时扫描——都可能悄悄吃掉你的数据。文件上传指定位置异常,往往不是“位置”错了,而是文件根本没到齐。

(责任编辑:百科)

推荐文章
  • 腾讯检测工具

    腾讯检测工具 腾讯内部有个工具,名字很朴素,就叫“腾讯检测工具”。我第一回见它,是在一个加班到凌晨两点的晚上。隔壁组的老王对着屏幕骂了一句脏话,然后甩过来一个链接,说:“你那个接口慢得像蜗牛,自己看看。” 点开那个 ...[详细]
  • 男子被下套陷骗局

    男子被下套陷骗局 手机屏幕亮起来的时候,老周正蹲在工地上扒拉盒饭。短信内容很简单:“您申请的贷款已通过初审,点击链接完善信息即可放款。”他抹了把嘴,指尖在屏幕上悬了两秒——儿子下学期的学费还差八千。 链接点进去是个仿冒 ...[详细]
  • 查看网址

    查看网址 我花了四十分钟,就为了弄明白一个网址为什么打不开。 那是个分享摄影作品的页面,朋友发来的,说里面有我可能感兴趣的山景。我点了一下,浏览器转圈,转了三秒,然后跳出一行字:无法访问此网站。第一次遇到这种情 ...[详细]
  • 昆明电力工程滇icp备

    昆明电力工程滇icp备 昆明电力工程的机房在关上片区,那栋灰白色楼里,服务器指示灯昼夜不歇地闪。我去年去那儿处理一个备案变更,在走廊里等了四十分钟,看见运维人员端着搪瓷杯来回穿梭,杯壁上印着“安全第一”的红字,漆都磨掉了一半 ...[详细]
  • b超四维预约可以周末去么

    b超四维预约可以周末去么 周六早上七点四十分,我攥着手机站在医院B超室门口。屏幕上显示“已过号”,护士探出头来:“您约的是周四的号,今天周末只做急诊和住院部检查。” 这事不怪医院。我翻预约单时确实看到“周末仅限产前筛查”的小字 ...[详细]
  • 青岛人才招聘网

    青岛人才招聘网 青岛人才招聘网,说到底就是个网站。但它背后,是这座城市对“人”的焦虑和渴望。我有个做HR的朋友,上个月在青岛人才招聘网挂了十二个岗位,从技术工人到中层管理,收到的有效简历不到三十份。她说,以前是筛简历 ...[详细]
  • 怎么举报电话号码骂人

    怎么举报电话号码骂人 昨天下午,邻居老周冲进我家,手机屏幕差点怼到我脸上。他儿子在游戏里被人用脏话轰炸了整整一局,回骂了几句,对面反而变本加厉,连祖宗十八代都捎上了。老周气得手抖,问我:“这号能举报吗?咋举报?” 能,而且 ...[详细]
  • 新型网络诈骗手段

    新型网络诈骗手段 我上个月差点被骗走八千块钱。骗子给我打了个电话,说我网购的快递在运输途中烧毁了,要给我双倍理赔。对方能准确报出我的订单号、收件地址,连我买的是啥型号的蓝牙耳机都一清二楚。我差点就信了——直到他让我下载 ...[详细]
  • 终端进入文件夹

    终端进入文件夹 终端里进入文件夹,就一条命令:`cd`。别笑,就这么简单。但很多人卡住,不是因为不会敲,而是没搞懂路径那点事。 你打开终端,默认在一个“家”目录里,通常叫`/home/你的用户名`。想进别的文件夹,比 ...[详细]
  • 网趣商城

    网趣商城 我盯着屏幕上那个跳动的橙色购物车图标,手指悬在鼠标左键上方三厘米处。犹豫了大概五秒钟,还是点了下去。网趣商城的首页弹出来,满屏的“限时秒杀”和“今日特惠”像夜市里争抢顾客的小贩,热闹得有些过分。 说实 ...[详细]
热点阅读