OSS云文件列举分页功能的解决方法
前言:
目前项目开发中上传功能很多都是使用云存储,其好处太多这里就不列举了。但是在上传成功后,有些功能场景下需要对存储桶内的文件进行管理。自然把历史的文件列表展示出来就很有必要了。然后有列表就有分页,云存储又不像本地存储直接读文件夹就可以,所以我想了两种方法来解决。
方法:
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云文件列举分页功能的解决方法相关推荐
- BaiduPCS-Go 下载文件出现 403 Forbidden 的解决方法
BaiduPCS-Go 是一款由 iikira 大佬使用 Go 语言编写的第三方百度网盘客户端,点此直达项目地址.BaiduPCS-Go 支持 Windows.macOS.linux.移动设备等平台, ...
- pdfwin10闪退_win10系统打开文件夹闪退的解决方法
今天小编给大家分享的是Win10系统打开文件夹闪退的解决方法,使用win10系统过程中,有时会遇到打开桌面文件夹就一直出现闪退的故障,为此问题困扰的用户,可参照以下的方法进行解决. 更新win10版本 ...
- ci框架中引入css,php ci框架中加载css和js文件失败的原因和解决方法
php ci框架中加载css和js文件失败的原因和解决方法 发布时间:2021-07-01 12:08:38 来源:亿速云 阅读:50 作者:chen 本篇内容介绍了"php ci框架中加载 ...
- 关于Qt Designer程序/UI文件打开未响应的解决方法
关于Qt Designer程序/UI文件打开未响应的解决方法 参考文章: (1)关于Qt Designer程序/UI文件打开未响应的解决方法 (2)https://www.cnblogs.com/ys ...
- python open找不到文件的原因_浅谈python在提示符下使用open打开文件失败的原因及解决方法...
题目:在提示符下使用open打开一个文件 刚开始网上看了下打开的方式,结果一直实现不了,报错是没找到这个文件,而且和我输入的文件名不一样. 错误如下: >>>open('d:\456 ...
- ntoskrnl.exe文件丢失或损坏的解决方法
ntoskrnl.exe文件丢失或损坏的解决方法<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:of ...
- VS2010 LNK1123:转换到 COFF期间失败:文件无效或损坏”的解决方法
2019独角兽企业重金招聘Python工程师标准>>> " "LNK1123:转换到 COFF期间失败:文件无效或损坏"的解决方法 一.错误描述 之前写 ...
- ios7自定义返回按钮后,右滑返回功能失效解决方法
ios7自定义返回按钮后,右滑返回功能失效解决方法 -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; //开 ...
- 服务器无法拖动文件复制文件,IT服务器运维:艾锑人为您整理Win10系统下移动、复制、删除文件需要管理员权限的解决方法...
影响我们一生百倍差距的四大效应 观察者效应:你的世界是什么样是由你的观察决定的. 这个效应是在[潜能突破]研习营课堂上发现的,我们有个练习叫三生万物,每个人都会成为一次观察者角色,当大家在成为其他角色 ...
最新文章
- 一篇文章帮你彻底搞清楚“I/O多路复用”和“异步I/O”的前世今生
- 每日两SQL(10),欢迎交流~
- 用过的jQuery记录
- ToolsOh第7批收录
- doe五步法_实验设计(DOE)的七大步骤分析
- 《Cocos Creator游戏实战》打砖块主要功能与逻辑实现
- Mooc视频字幕提取
- 微信加不了公众号服务器繁忙,微信公众号系统繁忙是怎么回事
- Android 系统性能优化
- 【滤波跟踪】基于随机有限集的多目标跟踪算法附matlab代码
- 视觉导航路径编辑器使用教程
- C语言后缀.h文件和.c文件作用和区别
- ui培训学校哪个比较好?
- 股票资管软件和股票跟单软件的代码是一样的可以共用
- 领扣LintCode问题答案-58. 四数之和
- buck电路 dac stm32_BUCK转换电路的工作原理
- 【数据仓库学习】数据质量监控
- 关于计算机技能的英语作文,英文简历写作:计算机技能
- 【rzxt.com】从四个角度判断本本屏幕好坏
- 鸿蒙OS与安卓、Fuchsia 对比分析