从日常使用微信文件传输助手来看,传输助手并非点对点传输,所有信息在传输中都将被中转存储在公用服务器上,传输信息的安全性难以得到保障。本文将基于 fiora 开源项目,以目的为导向重写项目,自制文件传输助手,从而实现数据(信息、图片、文件)的安全传输与存储。


微信文件传输javascript_聊天室


本文入选 1024博客专家TOP 50 榜单,在这里诚挚的感谢大家一直以来对我的支持与帮助!


一、环境准备

fiora是基于node.js和react全栈开发的聊天室。要运行 Fiora, 你需要 Node.js(v10 LTS版本, 例如10.6.3) 开发环境和 MongoDB 数据库。

  • 安装 Node.js
  • 安装 MongoDB(直接在宝塔面板安装MongoDB)
安装Nodejs
#Debian/Ubuntu系统
curl -sL https://deb.nodesource.com/setup_10.x | bash -
apt install -y git nodejs 

#CentOS系统
curl -sL https://rpm.nodesource.com/setup_10.x | bash -
yum install nodejs git -y

二、配置项目

fiora是基于node.js和react全栈开发的聊天室。从功能角度上而言与文件传输助手相区别,因此需要重写项目。

重写项目下载地址:http://file.dxj.im/transfer-master.zip

如果使用的是原版开源代码,注意禁止注册功能:

修改 config/server.ts, 将 disableRegister 选项设置为 true,重启服务器生效。

微信文件传输javascript_1024程序员节_02


可以参考的配置文档:

  1. 项目原文档
  2. 第三方文档

三、项目部署

#拉取源码

#安装依赖,这里不能用npm,需要用yarn来安装
npm i -g yarn
yarn
#构建
npm run build
#转移产物
npm run move-dist
#注册一个账号
npx ts-node bin/register.ts --username [新用户名] --password [用户密码]
#启动
npm start

微信文件传输javascript_数据库_03


运行后打开ip:9200,登陆账号:

可以看SSH客户端运行日志,获取自己的userId。

微信文件传输javascript_1024程序员节_04

接下来再将自己的账号设置成管理员,先使用Ctrl+C断开运行。

export Administrator=5f4299a05c4596d1d658025f Port=9200
nohup npm start &

注意:在当shell中提示了nohup成功后,还需要按终端上键盘任意键退回到shell输入命令窗口,然后通过在shell中输入exit来退出终端;如果在nohup执行成功后直接点关闭程序按钮关闭终端的话,这时候会断掉该命令所对应的session,导致nohup对应的进程被通知需要一起shutdown,起不到关掉终端后调用程序继续后台运行的作用。

微信文件传输javascript_数据库_05

此时就可以访问ip:9200。此时可以通过nginx域名反代的形式部署域名。

站点配置——配置文件:

location / {
    proxy_pass http://127.0.0.1:9200;
    proxy_set_header Host             $host;
    proxy_set_header X-Real-IP        $remote_addr;
    proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;

    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header X-Forward-Proto http;
    proxy_set_header X-Nginx-Proxy true;
    proxy_http_version 1.1;

    proxy_redirect off;
}

四、设置开机自启:

以宝塔面板为例:

#先给node做个软连接,不然后面会启动失败
ln -sf $(which node) /usr/bin/node

#新建systemd配置文件,将以下代码一起复制到SSH运行
cat > /etc/systemd/system/fiora.service <<EOF
[Unit]
Description=fiora
After=network.target
Wants=network.target

[Service]
Type=simple
PIDFile=/var/run/fiora.pid
ExecStart=$(command -v npm) start
WorkingDirectory=/www/wwwroot/i.dxj.im
Environment=NODE_ENV=production Administrator=$Administrator Port=$Port
User=www
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl start fiora
systemctl enable fiora

五、展示效果

在管理员账户没有登陆的时候:

微信文件传输javascript_微信文件传输javascript_06

管理员账户登陆后:

微信文件传输javascript_文件传输_07

移动端:

微信文件传输javascript_数据库_08

六、后期维护:记录的删除

# 进入数据库
mongo
# 查询数据库列表
show databases
# 进入数据库
use fiora

微信文件传输javascript_数据库_09

# 查询数据表列表
show collections
# 查询数据表内容
db.messages.find()

微信文件传输javascript_聊天室_10

#删除数据表内信息
db.messages.deleteMany({to: "5f429aa7c0d0e3e0f2d7e499" });

删除第二聊天室的内容,也就是编号为5f429aa7c0d0e3e0f2d7e499的聊天室

微信文件传输javascript_文件传输_11


此时,只剩下第一聊天室的信息了

微信文件传输javascript_聊天室_12


至此,本文也就进入尾声了。希望本文能够起到抛砖引玉之效,也欢迎大家的批评交流。


如果您有任何疑问或者好的建议,期待你的留言、评论与关注!