前言:

目前项目开发中上传功能很多都是使用云存储,其好处太多这里就不列举了。但是在上传成功后,有些功能场景下需要对存储桶内的文件进行管理。自然把历史的文件列表展示出来就很有必要了。然后有列表就有分页,云存储又不像本地存储直接读文件夹就可以,所以我想了两种方法来解决。

方法:

1. 将上传的文件返回的地址都存到数据库中,取列表就分页的读表返回。

2. 使用OSS文档的文件列举方法,好处是不用建表等等,所以下面以这种方式演示。

说明:

Oss的SDK中提供一个方法listObjects,接收两个参数($bucket, $options)。分别表示存储桶名,基本参数集。$options是个数组,里面又有$prefix,$delimiter,$nextMarker,$maxkeys,参数描述见如下。

$prefix是自己在存储桶下存放文件的文件夹路径,做分页最主要的是$nextMarker,$maxkeys这两个参数。一个是文件的起点就相当于分页start,一个是每次列举的最大个数就相当于page_size。

思路:

实现这个分页是不带页码下拉式加载,所以不存在可以点击返回上一页,主要从$nextMarker,$maxkeys开始。

1. getNextMarker()方法获取上一次列举文件的标识,没有为空窜,有则返回上一次列表最后的那个文件路径。

2. 将返回的标识存入缓存中,每次接口请求进来从缓存中读取一下上一次的文件标识。

3. 将标识传入listObjects方法中$options参数的$nextMarker。就可以以上一次标识为起点列举后面的列表。

4. 自定义一参数,如$page,(为0,$nextMarker则不取缓存直接传入空窜标识;下拉时则page累加传入缓存标识)。这样就可在接口请求时从最开始列举Oss文件。

代码实现:

1. 业务接口方法。

/** 列举公用(获取图片列表/获取文件列表)* @access private* @return array* */private function getList($page = 0 , $dirname){list($proctol,$domain) = explode("//", $this->oss->config['EndPoint']);         // Oss对外域名/*获取配置项分页页码,判断页数*/if (!empty($this->ueconfig) && is_array($this->ueconfig)) {$pageSize = 20;}// 文件起点标识$marker = "";if($page > 0) {$marker = Cache::store('redis')->get($this->config['bucket']."-".$dirname."maker");}// 获取配置文件中的页码$pageSize = $this->ueconfig['imageManagerListSize'];//$pageSize = 2;// 调用封装的Oss文件列举方法$res = $this->oss->listBuckets($this->config['bucket'],$dirname,$pageSize,$marker);$ret = [];if($res['code'] == 1) {foreach ($res['data']['obj']->getObjectList() as $key => $value) {//$ret[] = $proctol."//".$this->config['bucket'].".".$domain."/".$value->getKey();array_unshift($ret,$proctol."//".$this->config['bucket'].".".$domain."/".$value->getKey());}if(!$res['data']['next_marker']) {$marker = explode(".com/",$ret[0])[1];} else {$marker = $res['data']['next_marker'];}// 标识存入缓存Cache::store('redis')->set($this->config['bucket']."-".$dirname."maker",$marker);}return $ret;}

2. Oss文件列举封装方法。

/** 列举文件* @access public* @add: bqs* @praam: string $bucket 存储桶名* @param: string $prefix 文件路径* @param: int $page 开始页* @param: int $maker 分页标识* @return: array* */public function listBuckets($bucket = "hhbusiness", $prefix = "", $pagesize = 20, $maker = ""){$config = $this->config;$res['code'] = 1;$res['message'] = '';$res['data'] = "";try {$ossClient = new OssClient($config['AccessKeyID'], $config['AccessKeySecret'], $config['EndPoint']);//$prefix = 'article/uploadimage/';$delimiter = '/';$nextMarker = "";//$maxkeys = 1;$options = array('delimiter' => $delimiter,'prefix' => $prefix,'max-keys' => $pagesize,'marker' => $maker,);$result['obj'] = $ossClient->listObjects($bucket, $options);$result['next_marker'] = $result['obj']->getNextMarker();// 没有值if ($result['obj']->getIsTruncated() !== "true") {//break;}$res['code'] = 1;$res['data'] = $result;} catch (OssException $e) {$res['code'] = 0;$res['message'] = $e->getMessage();}return $res;}

公众号回复 “Oss列举” 获取完整的示例代码。

 

OSS云文件列举分页功能的解决方法相关推荐

  1. BaiduPCS-Go 下载文件出现 403 Forbidden 的解决方法

    BaiduPCS-Go 是一款由 iikira 大佬使用 Go 语言编写的第三方百度网盘客户端,点此直达项目地址.BaiduPCS-Go 支持 Windows.macOS.linux.移动设备等平台, ...

  2. pdfwin10闪退_win10系统打开文件夹闪退的解决方法

    今天小编给大家分享的是Win10系统打开文件夹闪退的解决方法,使用win10系统过程中,有时会遇到打开桌面文件夹就一直出现闪退的故障,为此问题困扰的用户,可参照以下的方法进行解决. 更新win10版本 ...

  3. ci框架中引入css,php ci框架中加载css和js文件失败的原因和解决方法

    php ci框架中加载css和js文件失败的原因和解决方法 发布时间:2021-07-01 12:08:38 来源:亿速云 阅读:50 作者:chen 本篇内容介绍了"php ci框架中加载 ...

  4. 关于Qt Designer程序/UI文件打开未响应的解决方法

    关于Qt Designer程序/UI文件打开未响应的解决方法 参考文章: (1)关于Qt Designer程序/UI文件打开未响应的解决方法 (2)https://www.cnblogs.com/ys ...

  5. python open找不到文件的原因_浅谈python在提示符下使用open打开文件失败的原因及解决方法...

    题目:在提示符下使用open打开一个文件 刚开始网上看了下打开的方式,结果一直实现不了,报错是没找到这个文件,而且和我输入的文件名不一样. 错误如下: >>>open('d:\456 ...

  6. ntoskrnl.exe文件丢失或损坏的解决方法

    ntoskrnl.exe文件丢失或损坏的解决方法<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:of ...

  7. VS2010 LNK1123:转换到 COFF期间失败:文件无效或损坏”的解决方法

    2019独角兽企业重金招聘Python工程师标准>>> " "LNK1123:转换到 COFF期间失败:文件无效或损坏"的解决方法 一.错误描述 之前写 ...

  8. ios7自定义返回按钮后,右滑返回功能失效解决方法

    ios7自定义返回按钮后,右滑返回功能失效解决方法 -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; //开 ...

  9. 服务器无法拖动文件复制文件,​IT服务器运维:艾锑人为您整理Win10系统下移动、复制、删除文件需要管理员权限的解决方法...

    影响我们一生百倍差距的四大效应 观察者效应:你的世界是什么样是由你的观察决定的. 这个效应是在[潜能突破]研习营课堂上发现的,我们有个练习叫三生万物,每个人都会成为一次观察者角色,当大家在成为其他角色 ...

最新文章

  1. 一篇文章帮你彻底搞清楚“I/O多路复用”和“异步I/O”的前世今生
  2. 每日两SQL(10),欢迎交流~
  3. 用过的jQuery记录
  4. ToolsOh第7批收录
  5. doe五步法_实验设计(DOE)的七大步骤分析
  6. 《Cocos Creator游戏实战》打砖块主要功能与逻辑实现
  7. Mooc视频字幕提取
  8. 微信加不了公众号服务器繁忙,微信公众号系统繁忙是怎么回事
  9. Android 系统性能优化
  10. 【滤波跟踪】基于随机有限集的多目标跟踪算法附matlab代码
  11. 视觉导航路径编辑器使用教程
  12. C语言后缀.h文件和.c文件作用和区别
  13. ui培训学校哪个比较好?
  14. 股票资管软件和股票跟单软件的代码是一样的可以共用
  15. 领扣LintCode问题答案-58. 四数之和
  16. buck电路 dac stm32_BUCK转换电路的工作原理
  17. 【数据仓库学习】数据质量监控
  18. 关于计算机技能的英语作文,英文简历写作:计算机技能
  19. 【rzxt.com】从四个角度判断本本屏幕好坏
  20. 鸿蒙OS与安卓、Fuchsia 对比分析

热门文章

  1. 代理模式——案例分析与代码演示
  2. ledkvm切换器结构大变样:采用双滑轨设计,更易用
  3. hdu4411 Arrest 最小费用流
  4. js判断客户端访问是安卓还是ios
  5. 12段8位驱动芯片TM1629D驱动12位8段共阳数码管
  6. JS常用代码片段-127个常用罗列-值得收藏
  7. 论坛入口forum.php
  8. JS 实现抛物线运动
  9. 机器人学数学理论_基于格理论的机器学习数学
  10. 浅析VS游戏竞技平台识别作弊软件的手段