醋醋百科网

Good Luck To You!

Influxdb3-Explorer导入CSV大文件失败的原因分析和解决

原因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文档方面参考性太差,应当说明必要的限制,而且异常提示也不够清晰。希望官方能尽快改善,别只顾搞商业版,否则体验太差直接劝退大批用户。


控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言