yinxin630 / fiora

An interesting open source chat application. Developed with node.js, mongoDB, socket.io and react
https://fiora.suisuijiang.com
MIT License
6.68k stars 1.33k forks source link

实现大文件上传教程(有这个需求的可以看看) #493

Open ADKYUSHU12321 opened 2 years ago

ADKYUSHU12321 commented 2 years ago

首先在此感谢大佬的开源,该程序是我见过最棒的开源聊天室,对我个人而言,如果只能将大于1mb的文件上传到阿里云oss,不管这些文件有多大,用户一多起来,那流量费太贵了,看着socket.io的文档折腾了一下,各位大佬勿喷。

前言:

请注意!!!由于上传大文件需要很多负载,请勿在低配服务器上修改使用!

生产环境下可能遭到流量攻击? 请慎用!我1h1g的测试机器上传100mb测试文件直接卡死。

推荐性能配置

44444

第一步:修改服务端

cd fiora/packages/server/src

修改app.ts里的第37行和38行:

pingTimeout: 10000, 
pingInterval: 5000,

将这两个的数值改成你自己需要的数值,单位为毫秒,大概意思就是增加socket.io的连接超时,时间越长,你上传大文件时就不会因为超时断开连接。

cd fiora/packages/server/node_modules/engine.io/lib

修改server.js里的28行和29行:

        pingTimeout: 20000,
        pingInterval: 25000,

将这两个的数值改成你自己需要的数值,单位为毫秒,同上。

修改server.js里的31行: maxHttpBufferSize: 1e6,

其中1e6是b字节的数值,这里是限制你上传文件的大小,你可以根据自己的需要更改。

111

(貌似这里只能用b字节?那就需要你自己去换算)

第二步:修改客户端配置文件

vi fiora/packages/config/client.ts

    maxFileSize: process.env.MaxFileSize
        ? parseInt(process.env.MaxFileSize, 10)
        : MB * 10,

其中: MB * 10,把10改成你需要的数值,单位MB,这里是在客户端限制你上传文件的大小。

第三步:修改Nginx上传文件限制和连接超时

1212 2222

这里用的宝塔,大家可以自己在nginx.conf修改。

第四步:

重构: yarn build:web 启动: yarn start

效果:

3333

ps:最新测试,不知道为什么用Nginx反代后的域名上传文件会失败,直接ip上传没问题,貌似是Nginx的问题?抓包了一下返回504,502

1

$8~)GE $5WM@ZAL1IO4(NN3

yinxin630 commented 2 years ago

Great~ 👍

LWBobo commented 1 year ago

我是使用docker部署的,按照你的方法进入容器,修改了相关代码还是不行,上传文件直接提示文件过大,我设置的文件大小是200M,修改了但是好像没有用...大佬你知道怎么回事吗?

LWBobo commented 1 year ago

解决了,重新build一下就好了...大意了

cancundeyingzi commented 1 year ago

有没有成品啊,,一直报错,,,,,,,,,,,,,

cancundeyingzi commented 1 year ago

解决了,重新build一下就好了...大意了

我build一直报错...查了报错方法也不行.

LWBobo commented 1 year ago

yarn build:web 进入docker容器修改完参数,执行上边这个命令,执行完重启容器就行了。

cancundeyingzi commented 1 year ago

yarn build:web 进入docker容器修改完参数,执行上边这个命令,执行完重启容器就行了。

是,但是我yarn build:web一直error,报错信息别的issues也有提及,但是并没给出解决方案

LWBobo commented 1 year ago

这...我修改完重新编译,直接就好了....没出现什么报错啊,前端报错一般都是包下载的问题之类的,但是现在什么包都有了...只需要重新编译一下怎么会出错...会不会是你改参数的时候改错了删了点什么东西之类的

cancundeyingzi commented 1 year ago

image

cancundeyingzi commented 1 year ago

yarn build:web

我确定不是我的问题,

cancundeyingzi commented 1 year ago

这...我修改完重新编译,直接就好了....没出现什么报错啊,前端报错一般都是包下载的问题之类的,但是现在什么包都有了...只需要重新编译一下怎么会出错...会不会是你改参数的时候改错了删了点什么东西之类的

我整个docker删掉重新下载了,不修改任何参数一样报错,