原因1: 修改nginx的配置,增加文件大小限制为100MB
上传文件为5.3MB,请求接口为
http://172.16.224.140:18888/api/write-data/parse。通过报错信息发现是nginx抛出的报错信息,猜测是做了文件大小限制,或超出了默认的文件大小限制。因此尝试修改文件大小限制解决。
<html>
<head><title>413 Request Entity Too Large</title></head>
<body>
<center><h1>413 Request Entity Too Large</h1></center>
<hr><center>nginx/1.28.0</center>
</body>
</html>
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
nano /etc/nginx/nginx.conf
# 允许最大 100MB 的上传
client_max_body_size 100M;
原因2: 后端限制--文件上传大小限制
报错:File too large
修改nginx配置后,重试,发现仍旧报错,但报错信息有变化,也说明Nginx配置已生效。
进一步查看接口响应,像是服务端处理后的返回。因此尝试了解项目的其他模块信息。
{
"statusCode": 413,
"timestamp": "2025-07-23T13:38:38.961Z",
"path": "/api/write-data/parse",
"message": "File too large",
"error": "Payload Too Large",
"code": "UNKNOWN_ERROR"
}
查看容器中的相关目录,发现有后端命名的文件夹。
内部文件有
坏消息:似乎是node服务,而且已经经过打包混淆,没有源码的情况下无法修改。
好消息:这种打包编译,并不彻底,还是有一定的可读性,也许可以尝试找到真正限制的位置参数,直接修改或替换编译后的文件内容,来使新配置生效。(噩梦开始了,可读性有一点,但不多~~!!!!)
先感受下内容,vscode直接卡死,后续操作尽量通过vim进行。
尝试各种可能的关键词,想象你就是这个项目的开发者,会有哪些命名习惯,如limit、filelimit、filesize、upload等等,尝试了各种后发现有个limits:{fileSize:5242880},格式很符合,数字也很眼熟,5MB的数值。于是,将刚才的文件,删除部分,保证文件小于5MB,预期应该是能够成功。
技巧:当确定一定范围后,可借助Ai协助分析,尤其是针对不熟悉前端项目的同学,这样针对性更强,同时避免误操作。如,这是我的提问。可以看到还是有很多信息的。
果然,缩减到4.7MB后,再次尝试,成功!!!接口成功返回,页面也展示出解析到的相关数据。
修改配置为104857600,即100MB。再次尝试【Parse Data】,发现超过5MB的文件也能成功。
原因3: 后端限制--Express的请求体(body)大小限制
报错:request entity too large
查看/api/write-data/convert请求,类型为application/json,触发了请求体的大小限制(NestJS 使用默认的 10MB 限制)。
注意:原因2不同是因为,/api/write-data/parse接口是通过表单上传文件,是触发了文件大小限制。
报错内容:
{
"statusCode": 500,
"timestamp": "2025-07-23T07:22:42.310Z",
"path": "/api/write-data/convert",
"message": "request entity too large",
"error": "PayloadTooLargeError",
"code": "UNKNOWN_ERROR"
}
通过Ai尝试查找express.json()、express.raw()等body解析中间件相关内容,没有直接找到。但通过Ai提示,得知可能与NestJS实例创建过程中加载有关,那么就可以人工插入配置,来覆盖或新增配置项。Ai提示,可以添加类似配置项:
app.use(require("express").json({ limit: "100mb" }));
app.use(require("express").urlencoded({ extended: true, limit: "100mb" }));
从main.js默认发现了“i.NestFactory.create(l.AppModule,t)”相关内容,且有a.use(xxxx)等内容,因此尝试改为同格式,并插入。如下:(注意用于分隔的逗号",")
a.use(require("express").json({ limit: "100mb" })),a.use(require("express").urlencoded({ extended: true, limit: "100mb" })),
重启配置后再次尝试【Convert to Line Protocol】,已经生效。
总结
虽然都是大小限制,但实际上处于不同阶段、不同原因导致。
官方打包该项目时可能未充分考虑多种情况,实际项目中,csv文件10MB甚至更大都很正常,仅默认的1MB或5MB很难满足需求,若是要求用户使用过程中自行切片,那么效率太低,而且无法享受到流畅的操作体验。
另外,最好能够将配置以环境变量或配置文件等方式,允许用户根据自己需要修改。最后,必须要说一点,influxdb3-explorer文档方面参考性太差,应当说明必要的限制,而且异常提示也不够清晰。希望官方能尽快改善,别只顾搞商业版,否则体验太差直接劝退大批用户。