php eayswoole node axios crypto-js 实现大文件分片上传复盘

不啰嗦  直接上步骤

步骤1.开发环境配置

项目需要node.js 做前端支撑    官网下载地址:

http://nodejs.cn/download/

根据自己需要下载对应的版本,我下载的是windows系统64位的版本。

包下载好后  进行安装,安装步骤在此省略...

测试是否安装成功

如果是window  按住键盘Win+R    输入cmd   在终端里面输入

node -v

npm-v

如果安装成功会出现安装的node   npm   的软件版本号,否则为安装失败。如下图

php eayswoole node axios crypto-js 实现大文件分片上传复盘_第1张图片

因为一些原因 npm 下载包巨慢    你懂得,所以我们这里选用淘宝镜像  打开终端   运行如下命令:

npm install -g cnpm --registry=https://registry.npm.taobao.org

安装好后  运行命令:

cnpm -v
[email protected] (C:\Users\King\AppData\Roaming\npm\node_modules\cnpm\lib\parse_argv.js)
[email protected] (C:\Users\King\AppData\Roaming\npm\node_modules\cnpm\node_modules\npm\index.js)
[email protected] (D:\Program Files\node\node.exe)
[email protected] (C:\Users\King\AppData\Roaming\npm\node_modules\cnpm\node_modules\npminstall\lib\index.js)
prefix=C:\Users\King\AppData\Roaming\npm
win32 x64 10.0.22621
registry=https://registry.npmmirror.com

步骤2.构想分片上传逻辑,编写逻辑代码(核心)

基本思路:

1)前端侧  :前端上传文件,根据分片大小,自动计算出整个文件的分片数量,以及分片二进制文件,以及整个文件的md5值,以及分片文件md5值,传与后端,后端处理完后,根据上传分片的进度以及后端返回状态,判断整个文件是否传输完毕,完毕后,前端展示完成进度。结束整个分片上传逻辑。

2)后端PHP侧:后端接收前端传过来的数据,包括文件名,文件md5,分片信息,然后将分片文件信息存储到redis  有序集合中,其中key为整个文件的md5 ,待所有分片文件都上传完后,根据顺序,然后将文件整合存储,然后完成整个文件分片上传逻辑。

下面我们来编写相关代码 :

前置条件  我们已经安装了此环境   环境如下:

运行环境 版本
Linux centos  7.7.1908
PHP  7.4.19
redis 6.2.1
swoole扩展 4.8.13
eayswoole 3.5.1

 首先我们需要使用到redis  部分代码如下:

首先配置redis 相关信息  此处我们将配置文件放在根目录下Config 目录 Redis.php中  代码如下:

[root@web1 easyswoole]# cd Config
ll
[root@web1 Config]# ll
总用量 28
-rw-r--r-- 1 root root 8725 9月  23 19:09 Common.php
-rw-r--r-- 1 root root 1450 9月   4 21:21 Iam.php
-rw-r--r-- 1 root root 3027 8月  29 18:47 Mimes.php
-rw-r--r-- 1 root root 1795 9月   4 19:21 Mysql.php
-rw-r--r-- 1 root root  948 9月  23 17:50 Redis.php
[root@web1 Config]# vim Redis.php


 [
        # 默认redis 配置
        'REDIS' => [
            'host' => '127.0.0.1',
            'port' => '6390',
            'auth' => 'yisa123456q',
            'db' => '1',
            'serialize' => 0
        ],

        # token存储redis,用来设置接口权限
        'REDIS_LOCAL' => [
            'host' => '127.0.0.1',
            'port' => '6390',
            'auth' => 'YISA123456Q',
            'db' => 5,
            'serialize' => 0
        ],

    ]
];

配置上传目录  后续Upload.php 控制器需要读取  Config/Common.php 代码如下:

 WEB_IP,
    'WEB_PATH' => BASEPATH,
    
    'UPLOAD' => [
        'tmp_dir' => '/uploads_tmp/',//分片文件缓存目录
        'upload_dir' => '/uploads/',//文件现在目录
     ],
      
    // 此处省略其他配置信息 .....
];

接下来需要定义连接池  直接上代码   

cd App/Pool 
touch RedisPool.php
redis_config = $redis_config;
    }

    protected function createObject() {
        return new Redis($this->redis_config);
    }
}

接下来,在入口文件EasySwooleEvent.php 注册redis 连接池

你可能感兴趣的:(javascript,开发语言,ecmascript)