返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >使用PHP操作MinIO
  • 128
分享到

使用PHP操作MinIO

php开发语言MinIO 2023-08-31 21:08:27 128人浏览 独家记忆
摘要

最近实验了下MiNIO,发现这个分布式存储还是很好用的,具体不做赘述。此处记录下使用PHP操作存储桶下的文件及文件夹。 我使用了yii2框架(其实并没有使用到yii中从函数),操作minio的前提是要先下载一个模块:aws-sdk-p

最近实验了下MiNIO,发现这个分布式存储还是很好用的,具体不做赘述。此处记录下使用PHP操作存储桶下的文件及文件夹。

我使用了yii2框架(其实并没有使用到yii中从函数),操作minio的前提是要先下载一个模块:aws-sdk-php,minio自己的sdk并不支持PHP(minio api 文档),但是它支持亚马逊s3的对象存储,使用亚马逊s3的标准也能操作minio。

首先,在yii2项目根目录下,使用composer安装下s3工具包。

composer require aws/aws-sdk-php

若不想使用composer,或者没有条件使用可以下载zip包(下载链接),可以参考亚马逊s3文档,文档地址为:安装AWS SDK for PHP版本 3 - AWS SDK for PHP

工具包安装完毕,就可以调用工具包了,我写了一个简单的对桶中文件及文件夹的代码示例,如下:

s3Client = new S3Client([            'version' => 'latest',            'region'  => 'cn-north-1', //China (Beijing)            'endpoint' => $this->endpoint,            'use_path_style_endpoint' => true,            'credentials' => [                'key'    => $this->key,                'secret' => $this->secret,            ],        ]);    }        public function bucketExist($bucket = null)    {        return $this->s3Client->doesBucketExist($bucket);    }        public function bucketExists($bucket = null)    {        $result = $this->s3Client->listBuckets();        $names = $result->search('Buckets[].Name');        if($bucket){            if(!in_array($bucket, $names)){                return false;            }        }else{            if(!in_array($this->bucket, $names)){                return false;            }        }        return true;    }        public function objectExist($object)    {        return $this->s3Client->doesObjectExist($this->bucket, $object);    }        public function upLoadObject($objectPath, $objectName = null)    {        if(!$objectName){            $objectName = basename($objectPath);        }        $uploader = new MultipartUploader($this->s3Client, $objectPath, [            'bucket' => $this->bucket,            'key' => $objectName,        ]);        $result=$uploader->upload();        if(isset($result["@metadata"]["statusCode"]) && $result["@metadata"]["statusCode"] == 200){            return [                'bucket' => $this->bucket,                'name' => $objectName,                'path' => $this->bucket . '/' . $objectName            ];        }else{            return false;        }    }        public function upLoadObjectToFolder($objectPath, $folderPath, $objectName = null)    {        if(!$objectName){            $objectName = basename($objectPath);        }        $key = $folderPath . '/' . $objectName;        $result = $this->s3Client->putObject([            'Bucket' => $this->bucket,            'Key' => $key,            'Body' => file_get_contents($objectPath) //要上传的文件        ]);        if(isset($result["@metadata"]["statusCode"]) && $result["@metadata"]["statusCode"] == 200){            return [                'bucket' => $this->bucket,                'name' => $objectName,                'path' => $this->bucket . '/' . $key            ];        }else{            return false;        }    }        public function batchUpload($objectPathArr)    {        //路径数组        $pathArr = array();        $s3 = $this->s3Client;        foreach ($objectPathArr as $object) {            if(file_exists($object)){                //文件扩展名                $extend = substr(strrchr($object,'.'),1);                //文件名                $fileName = date('Ymd') . '-' . uniqid() . '.' . $extend;                $return = $s3->putObject([                    'Bucket' => $this->bucket, //存储桶名称                    'Key' => $fileName, //文件名(包括后缀名)                    'Body' => file_get_contents($object) //要上传的文件                ]);                if (isset($return['@metadata']['statusCode']) && $return['@metadata']['statusCode'] == 200) {                    $pathArr[] = [                        'bucket' => $this->bucket,                        'name' => $fileName,                        'path' => $this->bucket . '/' . $fileName                    ];                } else {                    //此处可增加日志记录                    continue;                }            }        }        return $pathArr;    }        public function copyObject($sourceObject, $objectName = null)    {        if(!$objectName){            $extend = substr(strrchr($sourceObject,'.'),1);            $objectName = date('Ymd') . '-' . uniqid() . '.' .$extend;        }        //源对象需包含桶+key        $source = '/' . $this->bucket . '/' . $sourceObject;        $result = $this->s3Client->copyObject([            'Bucket' => $this->bucket, //存储桶名称            'CopySource' => $source,            'Key' => $objectName,        ]);        if(isset($result["@metadata"]["statusCode"]) && $result["@metadata"]["statusCode"] == 200){            return [                'bucket' => $this->bucket,                'name' => $objectName,                'path' => $this->bucket . '/' . $objectName            ];        }else{            return false;        }    }        public function getMetaData($object){        $retrive = $this->s3Client->getObject([            'Bucket' => $this->bucket,            'Key'    => $object,        ]);        if(!isset($retrive['@metadata'])){            return [];        }        return $retrive['@metadata'];    }        public function getUrl($object, $expires = null){        $cmd = $this->s3Client->getCommand('GetObject', [            'Bucket' => $this->bucket,            'Key' => $object        ]);        if(!$expires){            $expires = '+1 days';        }        $request=$this->s3Client->createPresignedRequest($cmd,$expires);        $presignedUrl = (string)$request->getUri();        return $presignedUrl;        //测试-图片        //return "";    }        public function getAll($data){        $param = [            'Bucket' => $this->bucket        ];        if(isset($data['num'])){            $param['MaxKeys'] = $data['num'];        }        if(isset($data['prefix'])){            $param['Prefix'] = $data['prefix'];        }        $retrive = $this->s3Client->listObjects($param);        if(isset($retrive['Contents'])){            return $retrive['Contents'];        }else{            return [];        }    }        public function deleteObject($object){        $result = $this->s3Client->deleteObject([            'Bucket' => $this->bucket,            'Key' => $object,        ]);        if(isset($result['@metadata']['statusCode']) && $result['@metadata']['statusCode'] == 204){            return true;        }else{            return false;        }    }        public function batchDeleteObject($objectArr)    {        $keys = array();        foreach ($objectArr as $item) {            $keys[] = array('Key' => $item);        }        $s3 = $this->s3Client;        $result = $s3->deleteObjects([            'Bucket' => $this->bucket,            'Delete' => ['Objects' => $keys]        ]);        if(isset($result["@metadata"]["statusCode"]) && $result["@metadata"]["statusCode"] == 200){            return true;        }else{            return false;        }    }        public function uploadFolder($folderPath, $folderName = null)    {        if(!$folderName) {            $folderName = basename($folderPath);        }        $keyPrefix = $folderName . '/';        $options['params']['ACL'] = 'public-read';        $this->s3Client->uploadDirectory($folderPath, $this->bucket, $keyPrefix , $options);        return true;    }        public function deleteFolder($folderPath)    {        $folderName = basename($folderPath);        $keyPrefix = $folderName . '/';        $this->s3Client->deleteMatchingObjects($this->bucket, $keyPrefix);        return true;    }}

在本地使用Docker安装一个minio的命令:

先docker pull minio的镜像。由于我本地是windows,所以目录映射就写为这样D:\data\minio\data:/data,本地9000端口已经被php占用,所以分配9001给minio使用。docker run --name minio -p 9001:9000 -p 9090:9090 -d --restart=always -e "MINIO_ROOT_USER=admin" -e "MINIO_ROOT_PASSWord=admin123" -v D:\data\minio\data:/data -v D:\data\minio\config:/root/.minio minio/minio:[版本tag] server /data --console-address ':9090'启动后,访问Http://127.0.0.1:9090/browser即可进入控制台

来源地址:https://blog.csdn.net/qq_32737755/article/details/129958304

--结束END--

本文标题: 使用PHP操作MinIO

本文链接: https://lsjlt.com/news/387012.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用PHP操作MinIO
    最近实验了下MinIO,发现这个分布式存储还是很好用的,具体不做赘述。此处记录下使用PHP操作存储桶下的文件及文件夹。 我使用了yii2框架(其实并没有使用到yii中从函数),操作minio的前提是要先下载一个模块:aws-sdk-p...
    99+
    2023-08-31
    php 开发语言 MinIO
  • Minio使用
    MinIO 是在 GNU Affero 通用公共许可证 v3.0 下发布的高性能对象存储。它与 Amazon S3 云存储服务 API 兼容。使用 MinIO 为机器学习、分析和应用程序数据工作负载构建高性能基础架构。 MinIO...
    99+
    2023-08-17
    java 数据库 redis
  • MinIO介绍使用
    MinIO介绍使用 MinIO 介绍 MinIO 是一款基于Go语言发开的高性能、分布式的对象存储系统。客户端支持Java,Net,Python,Javacript, Golang语言。 MinIO 英文官网 MinIO 中文官网 注意:中...
    99+
    2023-09-02
    docker linux java
  • 使用php操作xml教程
    php操作xml 最近计划写个人的小网站,一系列原因选择了用php来写,最大的问题就是虽然php很流行,但我从来没有接触过php,看了一个多星期的基本语法后做些小练习热热身,但是期间...
    99+
    2024-04-02
  • 怎么使用PHP操作Redis
    本篇内容主要讲解“怎么使用PHP操作Redis”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用PHP操作Redis”吧!redis 的基本操作方法1 redis 的连接 ://实例化red...
    99+
    2023-06-20
  • php中如何操作使用protobuf
    这篇文章主要介绍“php中如何操作使用protobuf”,在日常操作中,相信很多人在php中如何操作使用protobuf问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php中如何操作使用protobuf”的疑...
    99+
    2023-06-25
  • PHP 使用 PhpSpreadsheet 操作 excel 表格
    1 . 使用 命令 : composer require phpoffice/phpspreadsheet 安装 PhpSpreadsheet 读取excel表格中的内容 ...
    99+
    2023-09-11
    php 开发语言
  • 使用PHP操作Memcached数据库
    Memcached是一种高性能的分布式内存对象缓存系统,它可以帮助开发者通过缓存减轻服务器的负担,从而提高Web应用的运行效率。PHP是一种广泛使用的服务器端编程语言,它可以与Memcached进行交互,实现对缓存的读写操作。本文将介绍如何...
    99+
    2023-05-15
    PHP memcached 数据库操作
  • 使用PHP操作Redis数据库
    Redis是一款基于内存的高性能键值对数据库,可以被用于缓存、队列等多种场景。而PHP是一种开发语言,可以用于Web开发、后端服务等多种场景。如果我们能够将PHP和Redis结合使用,可以达到更优秀的性能和效果。本文将介绍如何使用PHP操作...
    99+
    2023-05-16
    PHP redis 数据库操作
  • 使用PHP操作Elasticsearch数据库
    随着大数据时代的到来,很多企业开始选择使用Elasticsearch数据库来存放和索引海量数据。而PHP是一个广泛使用的Web开发语言,因此,了解如何使用PHP操作Elasticsearch数据库将会大有裨益。安装Elasticsearch...
    99+
    2023-05-17
    PHP elasticsearch 数据库操作
  • 使用PHP操作Cassandra数据库
    Cassandra是一个基于NoSQL的分布式数据库管理系统,可以支持处理大量数据。PHP作为一种流行的服务器端编程语言,可以用于操作Cassandra数据库。本篇文章将介绍如何使用PHP驱动程序和CQL来连接和操作Cassandra数据库...
    99+
    2023-05-16
    PHP 数据库操作 Cassandra
  • PHP怎么使用fread()操作字节
    本篇内容主要讲解“PHP怎么使用fread()操作字节”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP怎么使用fread()操作字节”吧!fread语法fread  (&...
    99+
    2023-06-30
  • minio的基本使用——java
    第一步:下载minio服务安装包 去官网下载:MinIO | 用于创建高性能对象存储的代码和下载内容 minio的使用文档:MinIO Object Storage for Kubernetes — MinIO Object Storag...
    99+
    2023-09-01
    java 开发语言
  • MinIO的安装与使用
    MinIO的安装与使用 一、MinIO是什么?二、MinIO安装(centos7)2.1 下载MinIO2.2 启动MinIO2.3 修改配置2.4 编写启动脚本,以及加入到systemctl中 三、Springboot集成Mi...
    99+
    2023-08-18
    linux 开发语言 java 服务器
  • PHP使用PhpSpreadsheet库的操作Excel表格
    一、PhpSpreadsheet 介绍 PhpSpreadsheet是一个用纯PHP编写的库,提供了一组类,使您可以读取和写入不同的电子表格文件格式 PhpSpreadsheet提供了丰富的API接口...
    99+
    2023-10-01
    php excel
  • 如何使用PHP修改操作系统
    PHP 是一种强大的编程语言,很多 Web 开发者都使用它来创建动态网站和 Web 应用程序。PHP 不仅可以与不同的数据库进行交互,还能够与操作系统进行交互,执行一些操作系统级别的任务。本文将介绍如何使用 PHP 修改操作系统。一、修改系...
    99+
    2023-05-14
    php
  • PHP中使用Redis实现批量操作
    Redis是一款非常流行的高性能的内存数据库,在PHP开发中,使用Redis可以实现诸如缓存、锁等应用场景。本文将介绍如何使用Redis实现批量操作。一、Redis批量操作概述Redis提供了一系列的批量命令,可以在一次请求中同时处理多个键...
    99+
    2023-05-16
    PHP redis 批量操作
  • 怎么使用PHP修改操作系统
    这篇文章主要介绍了怎么使用PHP修改操作系统的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用PHP修改操作系统文章都会有所收获,下面我们一起来看看吧。一、修改系统配置文件在大多数操作系统中,有一些重要的配...
    99+
    2023-07-05
  • 如何使用PHP操作Cassandra数据库
    这篇“如何使用PHP操作Cassandra数据库”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何使用PHP操作Cassan...
    99+
    2023-07-06
  • 怎么使用PHP操作日期和时间
    本文小编为大家详细介绍“怎么使用PHP操作日期和时间”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用PHP操作日期和时间”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、操作日期和时间 在 PHP 中,有...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作