当前位置: 首页 > news >正文

学习使用php判断阿里云oss图片单图或批量上传、查询图片文件是否存在

学习使用php判断阿里云oss图片单图或批量上传、查询图片文件是否存在

    • doesObjectExist

doesObjectExist

主要函数doesObjectExist

/*** Base64上传文件* @param string|array $images* @param string $model_path* @param string $model_type* @param string $upload_path* @param bool $autoName* @return array*/
protected function oss_base64_upload($images, $model_path = '', $model_type = 'images', $upload_path = '', $autoName = true)
{$accessKeyId = $this->oss_config['accessKeyId'];$accessKeySecret = $this->oss_config['accessKeySecret'];$endpoint = $this->oss_config['endpoint'];$bucket = $this->oss_config['bucket'];$isCName = true;if (empty($images)) {return ['Code' => 0, 'Msg' => '文件列表不能为空'];}$file_raw = [];$file_type = ['pjpeg', 'jpeg', 'jpg', 'gif', 'bmp', 'png', 'mov', '3gp', 'mp4', 'avi'];$preg_type = "image";$model_type = strtolower($model_type);if ($model_type == 'video') {$preg_type = $model_type;}//数组批量上传if (is_array($images) && count($images) > 0) {/** $images 批量上传示例(值为一维单列或多列数组)* $images = [*      "base64/image1..........."*      "base64/image2..........."* ]*/foreach ($images as $key => $value) {$value = trim($value);if (preg_match("/^(data:\s*$preg_type\/(\w+);base64,)/", $value, $result)) {$type = strtolower($result[2]);if (in_array($type, $file_type)) {$file_raw[] = ['raw' => base64_decode(str_replace($result[1], '', $value)), //文件流'extension' => $type, //文件后缀'index' => $key,];} else {return ['Code' => 0, 'Msg' => '文件类型错误'];}} else {return ['Code' => 0, 'Msg' => '文件base64格式不合法'];}}}//字符串单图上传if (is_string($images)) {/** $images 上传单个示例,字符串* $images = "base64/image..........."*/$images = trim($images);if (preg_match("/^(data:\s*$preg_type\/(\w+);base64,)/", $images, $result)) {$type = strtolower($result[2]);if (in_array($type, $file_type)) {$file_raw[] = ['raw' => base64_decode(str_replace($result[1], '', $images)), //文件流'extension' => $type, //文件后缀'index' => 0,];} else {return ['Code' => 0, 'Msg' => '文件类型错误'];}} else {return ['Code' => 0, 'Msg' => '文件base64格式不合法'];}}if (empty($upload_path)) {$model_path = strstr('/', $model_path) ? $model_path : $model_path . '/';$upload_path = "{$model_type}/{$model_path}" . date('Y-m-d') . '/';}require_once(THINK_PATH . 'Extend/Vendor/aliyun-oss/autoload.php');$ossClient = new \OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint, $isCName);$photo_list = [];try {if (!empty($file_raw)) {foreach ($file_raw as $value) {$name = substr(md5(base64_encode($value['raw']) . base64_encode(time() . mt_rand(33, 126))), 8, 16);if ($autoName === true) {$file_name = $upload_path . $name . "." . strtolower($value['extension']);} else {$file_name = $upload_path;}$getOssInfo = $ossClient->putObject($bucket, $file_name, $value['raw']);$getOssPdfUrl = $getOssInfo['info']['url'];if ($getOssPdfUrl) {$photo_list[$value['index']] = self::http_to_https($getOssPdfUrl);}}}} catch (OssException $e) {return ['Code' => 0, 'Msg' => $e->getMessage()];}return ['Code' => 1, 'Msg' => $photo_list];
}/*** OSS内文件是否存在* @param string $object @文件路径* @return bool*/
protected function doesObjectExist($object = '')
{$exist = false;if (empty($object)) {return $exist;}$accessKeyId = $this->oss_config['accessKeyId'];$accessKeySecret = $this->oss_config['accessKeySecret'];$endpoint = $this->oss_config['endpoint'];$bucket = $this->oss_config['bucket'];$isCName = true;require_once(THINK_PATH . 'Extend/Vendor/aliyun-oss/autoload.php');$ossClient = new \OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint, $isCName);try {$exist = $ossClient->doesObjectExist($bucket, $object);} catch (OssException $e) {$exist = false;//printf($e->getMessage() . "\n");}return $exist;
}

相关文章:

学习使用php判断阿里云oss图片单图或批量上传、查询图片文件是否存在

学习使用php判断阿里云oss图片单图或批量上传、查询图片文件是否存在 doesObjectExist doesObjectExist 主要函数doesObjectExist /*** Base64上传文件* param string|array $images* param string $model_path* param string $model_type* param string $upload_path* param…...

重磅| Falcon 180B 正式在 Hugging Face Hub 上发布!

引言 我们很高兴地宣布由 Technology Innovation Institute (TII) 训练的开源大模型 Falcon 180B 登陆 Hugging Face! Falcon 180B 为开源大模型树立了全新的标杆。作为当前最大的开源大模型,有180B 参数并且是在在 3.5 万亿 token 的 TII RefinedWeb 数…...

Linux命令行

目录 CLI GUI 命令行界面 图形界面 命令行提示符 # $ ​编辑 命令一般由三个部分组成 历史命令,使用上下键,或者使用history,ctrlr搜索历史命令 通配符 *,? 切换用户 su 作业管理 &,jobs,bg,fg CLI GUI 命令行界面 …...

[持续更新]计算机经典面试题基础篇Day1

[通用]计算机经典面试题基础篇Day1 1、jvm的组成 类加载器(Class Loader):负责将编译后的Java类加载到JVM中,并在运行时动态加载所需的类。运行时数据区(Runtime Data Area):是JVM的内存管理区…...

ProcessWindowFunction 结合自定义触发器的陷阱

背景: flink中常见的需求如下:统计某个页面一天内的点击率,每10秒输出一次,我们如果采用ProcessWindowFunction 结合自定义触发器如何实现呢?如果这样实现问题是什么呢? ProcessWindowFunction 结合自定义触发器实现…...

什么是jvm

一、初识JVM(虚拟机) JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 引入Jav…...

kettle通过java步骤获取汉字首拼

kettle通过java步骤获取汉字首拼 用途描述 一组数据,需要获取汉字首拼后,输出; 实现效果 添加jar包 pinyin4j-2.5.0.jar 自定义常量数据 Java代码 完整代码: import net.sourceforge.pinyin4j.PinyinHelper; import net.sou…...

Conformer: Local Features Coupling Global Representationsfor Visual Recognition

论文链接:https://arxiv.org/abs/2105.03889 代码链接:https://github.com/pengzhiliang/Conformer 参考博文:Conformer论文以及代码解析(上)_conformer代码_从现在开始壹并超的博客-CSDN博客 摘要 在卷积神经网络…...

java8-Stream流常用API

什么是 Stream Stream(流)是 Java 8 引入的一个新的抽象概念,它代表着一种处理数据的序列。简单来说,Stream 是一系列元素的集合,这些元素可以是集合、数组、I/O 资源或者其他数据源。 Stream API 提供了丰富的操作方…...

React 任务调度

React 任务池 不同的fiber任务有不同的优先级,为了用户体验,React需要先处理优先级高的任务。 为了存储这些任务,React中有两个任务池: // Tasks are stored on a min heap var taskQueue []; // 存储立即要执行的任务 var tim…...

小白开始学习C++

​​​​第一节&#xff1a;控制台输出hello word&#xff01; #include<iostream> //引入库文件 int main() { //控制台输出 hello word! 之后回车 std::cout << "hello word!\n"; #include<iostream> //引入库文件int main() {//控制…...

SpringMVC入门的注解、参数传递、返回值和页面跳转---超详细教学

前言&#xff1a; 欢迎阅读Spring MVC入门必读&#xff01;在这篇文章中&#xff0c;我们将探索这个令人兴奋的框架&#xff0c;它为您提供了一种高效、灵活且易于维护的方式来构建Web应用程序。通过使用Spring MVC&#xff0c;您将享受到以下好处&#xff1a;简洁的代码、强大…...

【复习socket】每天40min,我们一起用70天稳扎稳打学完《JavaEE初阶》——28/70 第二十八天

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示:重难点★✔ 蓝色文字表示:思路以及想法★✔   如果大家觉得有帮助的话,感谢大家帮忙 点…...

vue2踩坑之项目:生成二维码使用vue-print-nb打印二维码

1. vue2安装 npm install vue-print-nb --save vue3安装 npm install vue3-print-nb --save 2. //vue2 引入方式 全局 main.js import Print from vue-print-nb Vue.use(Print) ------------------------------------------------------------------------------------ //vue2 …...

【iVX】十五分钟制作一款小游戏,iVX真有怎么神?

个人主页&#xff1a;【&#x1f60a;个人主页】 新人博主&#xff0c;喜欢就关注一下呗~ 文章目录 前言iVX介绍初上手布置背景制作可移动物体总结&#xff08;完善步骤&#xff09; 前言 在上篇文章中&#xff0c;我向大家介绍了一种打破常规的编程方式——iVX&#xff0c;可…...

SpringMVC常用注解、参数传递、返回值

目录 前言 一、常用注解 二、参数传递 ​编辑 1. 基础类型String类型 2. 复杂类型 3. RequestParam 4. PathVariable 5.RequestBody 6. RequestHeader 三、方法返回值 一&#xff1a;void 二&#xff1a;String 三&#xff1a;Stringmodel 四&#xff1a;ModelAndVi…...

新公司第一次上架新APP需要提前准备哪些材料?

目录 前言一、需要上架的应用市场二、需要准备的资料总结 前言 前不久&#xff0c;使用一家新公司刚刚上架了一款新的APP项目。特此记录一下&#xff0c;现在第一次上架一款APP需要提前准备的各项材料。 一、需要上架的应用市场 现在&#xff0c;上架一款新的APP主流的应用市…...

『C语言进阶』指针进阶(一)

&#x1f525;博客主页&#xff1a; 小羊失眠啦 &#x1f516;系列专栏&#xff1a; C语言 &#x1f325;️每日语录&#xff1a;无论你怎么选&#xff0c;都难免会有遗憾。 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前言 在C语言初阶中&#xff0c;我们对指针有了一定的…...

2605. 从两个数字数组里生成最小数字(Java)

给你两个只包含 1 到 9 之间数字的数组 nums1 和 nums2 &#xff0c;每个数组中的元素 互不相同 &#xff0c;请你返回 最小 的数字&#xff0c;两个数组都 至少 包含这个数字的某个数位。 示例 1&#xff1a; 输入&#xff1a;nums1 [4,1,3], nums2 [5,7] 输出&#xff1a;1…...

深度解析 PostgreSQL Protocol v3.0(一)

引言 PostgreSQL 使用基于消息的协议在前端&#xff08;也可以称为客户端&#xff09;和后端&#xff08;也可以称为服务器&#xff09;之间进行通信。该协议通过 TCP/IP 和 Unix 域套接字支持。 《深度解析 PostgreSQL Protocol v3.0》系列技术贴&#xff0c;将带大家深度了…...

Fish-Speech 1.5应用案例:从播客配音到语音提醒,实战分享

Fish-Speech 1.5应用案例&#xff1a;从播客配音到语音提醒&#xff0c;实战分享 1. 项目概述与核心优势 Fish-Speech 1.5作为新一代文本转语音(TTS)系统&#xff0c;凭借其创新的DualAR架构在语音合成领域脱颖而出。这个开源项目通过双自回归Transformer设计&#xff0c;主T…...

企业数字化转型基石:全面认识4A企业架构数据架构方案

数据架构是企业架构中连接业务、应用与技术的桥梁&#xff0c;通过数据资产目录厘清家底&#xff0c;数据标准统一语言&#xff0c;数据模型指导开发&#xff0c;数据分布拉通业务流&#xff0c;从而提升数据质量与运作效率&#xff0c;支撑业务决策与系统建设。 统一语言&…...

PvZ Toolkit:突破植物大战僵尸限制的终极修改器

PvZ Toolkit&#xff1a;突破植物大战僵尸限制的终极修改器 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 副标题&#xff1a;面向全阶段玩家的游戏体验增强工具&#xff0c;让每一场攻防战尽在掌…...

OpenClaw+GLM-4.7-Flash:个人财务管理自动化实践

OpenClawGLM-4.7-Flash&#xff1a;个人财务管理自动化实践 1. 为什么需要自动化财务管理 每个月末&#xff0c;我都会面对一堆散乱的电子账单和银行流水。手动整理这些数据不仅耗时&#xff0c;还容易出错。直到我发现OpenClaw与GLM-4.7-Flash的组合&#xff0c;才真正实现了…...

Crypto-JS实战指南:如何构建可靠的浏览器端加密验证体系

Crypto-JS实战指南&#xff1a;如何构建可靠的浏览器端加密验证体系 【免费下载链接】crypto-js JavaScript library of crypto standards. 项目地址: https://gitcode.com/gh_mirrors/cr/crypto-js 在Web应用开发中&#xff0c;加密功能的正确性直接关系到用户数据安全…...

探索内转子MotorCAD电机模型:面包型永磁体的独特魅力

内转子motorcad电机模型&#xff0c;电机永磁体采用面包型&#xff0c;额定转速3000&#xff0c;可用于后续的优化设计&#xff0c;送motorcad中文手册。最近在研究电机这块&#xff0c;发现了一个超有意思的内转子MotorCAD电机模型&#xff0c;今天来和大家唠唠。这个模型的电…...

Qwen3-ASR-0.6B实战:一键部署,轻松实现多语言语音转文字

Qwen3-ASR-0.6B实战&#xff1a;一键部署&#xff0c;轻松实现多语言语音转文字 最近在语音识别领域&#xff0c;阿里云通义千问团队推出的Qwen3-ASR-0.6B模型引起了我的注意。这个模型最大的亮点就是支持52种语言和方言&#xff0c;而且只有0.6B参数&#xff0c;在精度和效率…...

xarray 实战指南 - 从数据操作到科学计算

1. 为什么你需要xarray&#xff1f; 第一次接触科学计算时&#xff0c;我用的是NumPy和Pandas。那时候处理气象数据&#xff0c;经常要手动管理维度、坐标和属性&#xff0c;一个简单的时空平均操作要写好几行代码。直到发现了xarray&#xff0c;才明白原来数据处理可以这么优雅…...

Z-Image-Turbo_Sugar脸部Lora效果增强:ControlNet+Lora联合调控Sugar脸部结构

Z-Image-Turbo_Sugar脸部Lora效果增强&#xff1a;ControlNetLora联合调控Sugar脸部结构 想生成那种又纯又欲、甜度爆表的Sugar风格脸部图片吗&#xff1f;是不是经常遇到模型生成的脸型不够精致、五官比例失调&#xff0c;或者风格不够统一的问题&#xff1f;今天&#xff0c…...

Vivado实战:从零封装自定义接口IP核的完整流程

1. 为什么需要封装自定义IP核 第一次接触FPGA开发时&#xff0c;我总喜欢把整个工程的所有代码都堆在一个项目里。直到某天需要复用之前的HDMI显示模块时&#xff0c;才发现要手动复制几十个文件&#xff0c;还得逐个修改端口连接。这种重复劳动让我意识到&#xff1a;封装IP核…...