太阳成游戏网站

联系官方销售客服

QQ1835022299

028-61286886

分享经验 版主:论坛审计组
前端显示zip源码结构,类似官方应用插件及模板的源码结构
类型:太阳成游戏网站CMS 更新时间:2024-12-12 21:59:20 上传文件

放到的位置: 根目录/config/custorm.php

解决的问题:前端上传的文件压缩包不解压缩的前提下,获取zip的目录展示出来,

例如 :官方的插件及模板详情页面的源码结构


需注意:个人使用的方式是 把阿里云oss  通过ossfs  挂载使用 需一点运维知识 阿里云教程:https://help.aliyun.com/document_detail/32195.html

腾讯云cosfs: 宝塔有免费的插件


大致实现:

1、首先要 新建一个字段:down 用来做上传用(这里用的阿里云云存储,不是本地存储)

image

2、先获取上传文件的路径(通过官方标签获取路径,然后截断路径 加上本地挂载的路径 我这里挂载在www/wwwroot/tmp/,自己挂载路径不同,需自行改)

3、设置缓存名称 md5加密一下 ,缓存路径(www/wwwroot/tmp/cache)这里缓存也放在云存储,生成的文件大约也就几十kb,还不如一个图片大,再加上缓存的过期时间

4、通过ziprchive类获取 zip目录的结构,获取结构时要记得转码,不然中文可能因为centos的原因,默认没中文,这里有的是 iconv ,php扩展不一定自带,可能需要手动安装一下,也有其他方式转码(自行解决)

5、在创建一个函数 生成树(默认是根据字母排序,会导致文件夹不优先显示,这里做了判断,优先显示文件夹)

image







回帖
  • 又菜又爱玩
    #1楼    又菜又爱玩
    2023-03-13 10:14:41
    Chrome 0
    ********此内容需要回复后才能看到********
    后端代码 有注释
  • 又菜又爱玩
    #2楼    又菜又爱玩
    2023-03-13 10:16:01
    Chrome 0
    前端调用代码: {generateHtmlTree($down)} 使用的是jstree.js 自行下载调用代码:
  • 远策
    #3楼    远策
    2023-05-22 14:32:25
    Chrome 0
    又菜又爱玩 学习一下学习一下
  • 远策
    #4楼    远策
    2023-05-22 14:32:45
    Chrome 0
    又菜又爱玩 学习一下学习一下
  • 远策
    #5楼    远策
    2023-05-22 14:54:49
    Chrome 0
    学习一下学习一下
  • 学习狂人
    #6楼    学习狂人
    2024-03-26 09:23:00
    Chrome 0
    学习一下学习一下
  • 爱客
    #7楼    爱客
    2024-04-02 00:02:43
    Chrome 0
    学习一下了
  • 学习狂人
    #8楼    学习狂人
    2024-04-02 11:19:42
    Chrome 0
    学习一下学习一下
  • 学无止境
    #9楼    学无止境
    2024-04-18 22:26:46
    Chrome 0
    学习了,谢谢
  • 学无止境
    #10楼    学无止境
    2024-04-18 22:27:25
    Chrome 0
    又菜又爱玩 怎么看不到code
  • 学无止境
    #11楼    学无止境
    2024-04-18 22:28:28
    Chrome 0
    回复几次都还看不到代码哦
  • 又菜又爱玩
    #12楼    又菜又爱玩
    2024-11-01 10:37:42
    Edge 0
    学无止境
     ['timeout' => 5]]));
        } else {
            // 打开 zip 文件并获取文件结构
            $zip = new ZipArchive();
            if ($zip->open($zipName) === true) {
                // 初始化文件树结构
                $tree = [];
                for ($i = 0; $i < $zip->numFiles; $i++) {
                    // 获取文件名,使用ZipArchive类提供的方法解决编码问题
                    $filename = $zip->getNameIndex($i, ZipArchive::FL_ENC_RAW);
                    // 转换编码为utf-8
                    $filename = iconv('CP936', 'utf-8', $filename);
                    // 分割路径为数组
                    $path = explode('/', $filename);
                    $node = &$tree;
                    foreach ($path as $dir) {
                        if (!isset($node[$dir])) {
                            $node[$dir] = [];
                        }
                        $node = &$node[$dir];
                    }
                }
                $zip->close();
                $html = treeToHtml($tree);
                file_put_contents($cacheFile, $html);
            }
        }
        // 输出 HTML 树
        echo '
    ' . $html . '
    '; } // 生成 HTML 树 function treeToHtml($tree) { $html = '
      '; // 先输出文件夹 foreach ($tree as $name => $subtree) { if (!empty($name) && empty(pathinfo($name, PATHINFO_EXTENSION))) { $html .= ' $subtree) { if (!empty($name) && !empty(pathinfo($name, PATHINFO_EXTENSION))) { $ext = pathinfo($name, PATHINFO_EXTENSION); $html .= '
  • 凌云大大
    #13楼    凌云大大
    2024-12-12 21:59:20
    Chrome 0
    又菜又爱玩 谢谢 我来看下