阿里OSS存储,php版demo

最近项目移到云服务器,所以需要处理一下

Step 1. 初始化OSSClient
SDK与OSS后台服务所有的交互都是通过OSSClient完成的。通过以下代码,可以生成OSSClient的实例:

<?php

require_once ‘/path/to/sdk/aliyun.php‘;

use \Aliyun\OSS\OSSClient;

$client = OSSClient::factory(array(
    ‘AccessKeyId‘ => ‘<access-key-id>‘,
    ‘AccessKeySecret‘ => ‘<access-key-secret>‘,
));
由于SDK使用了命名空间机制,需要在文件开始声明使用 \Aliyun\OSS\OSSClient 类。

OSSClient使用工厂方法构建了一个OSSClient实例,此方法接收一个array作为输入参数;array中的 AccessKeyId 和 AccessKeySecret 是由系统分配给用户的ID对,用于标识用户,为访问OSS做签名验证。

我们看到,上面的例子通过在array中设置 key-value 对来传递参数。之后要介绍的大部分SDK接口也是通过这种形式来使用的。

Step 2. 创建Bucket
你可以通过以下代码来创建Bucket:

<?php

$client->createBucket(array(
    ‘Bucket‘ => ‘your-bucket-name‘,
));
通过指定 Bucket 参数来制定Bucket的名字,Bucket的名称有全局唯一性,请尽量保证你的Bucket名称不与别人的重复。

关于Bucket的命名规范,参见 Bucket命名规范 。

Step 3. 上传Object
Object可以简单的理解成一个文件,你可以通过以下代码把Object上传到一个Bucket中:

<?php
$client->putObject(array(
    ‘Bucket‘ => ‘your-bucket-name‘,
    ‘Key‘ => ‘your-object-key‘,
    ‘Content‘ => ‘This is my content‘,
));
我们通过 Bucket 和 Key 来指定Object所在的Bucket以及Object的名字。 Content 为Object的实际内容,它可以为字符串或者是资源类型(resource),当 Content 类型为resource时,你必须指定Object的大小(以字节为单位)。

比如:

<?php

$client->putObject(array(
    ‘Bucket‘ => ‘your-bucket-name‘,
    ‘Key‘ => ‘your-object-key‘,
    ‘Content‘ => fopen(‘/path/to/file‘, ‘r‘),
    ‘ContentLength‘ => filesize(‘/path/to/file‘),
));
关于Object的命名规范,参见 Object命名规范 。

关于上传Object更详细的信息,参见 上传Object 。

Step 4. 获取Object列表
你可能想知道在一个Bucket中存的Object是什么,通过 listObjects 接口可以达到这一目的:

<?php

$objectListing = $client->listObjects(array(
    ‘Bucket‘ => ‘your-bucket-name‘,
));

foreach ($objectListing->getObjectSummarys() as $objectSummary) {
    echo $objectSummary->getKey();
}
listObjects 接口会返回 \Aliyun\OSS\Model\ObjectListing 对象,你可以通过对象的 getObjectSummarys 方法获取Object的列表。

Step 5. 下载Object
通过下面代码我们可以获取一个已经上传了的Object的内容:

<?php

$object = $client->getObject(array(
    ‘Bucket‘ => ‘your-bucket-name‘,
    ‘Key‘ => ‘your-object-key‘,
));

echo (string)$object;
事实上,getObject 方法返回了一个 \Aliyun\OSS\Model\OSSObject 的对象,此对象包含了Object的一些信息,以及一个可以用来读取object内容的resource类型的成员。

<?php

$object = $client->getObject(array(
    ‘Bucket‘ => ‘your-bucket-name‘,
    ‘Key‘ => ‘your-object-key‘,
));

echo "Key: " . $object->getKey() . "\n";
echo "Update Date: " . $object->getLastModified()->getTimestamp() . "\n";
echo "Content: \n";
echo stream_get_contents($object->getObjectContent()); // Print object‘s content.
Step 6. 处理异常
当我们执行一些错误的操作,比如试图获取一个不存在的bucket的Object列表的时候,SDK会抛出类型为 \Aliyun\OSS\Exceptions\OSSException 的异常;另外,由于网络错误等原因,client也有可能抛出 \Aliyun\Common\Exceptions\ClientException 异常。你可以catch这些异常:

<?php

try {
    $client->listObjects(array(
        ‘Bucket‘ => ‘bucket-non-exist‘,
    ));
} catch (\Aliyun\OSS\Exceptions\OSSException $ex) {
    echo "Error: " . $ex->getErrorCode() . "\n";
} catch (\Aliyun\Common\Exceptions\ClientException $ex) {
    echo "ClientError: " . $ex->getMessage() . "\n";
}
为了更简明地阐述SDK的使用,本文档的大多数实例代码都没有对异常进行处理。但是,在实际的开发中,为了实现程序的健壮性,你都应该捕获这些异常并处理它们。

一个实际的

public function zz() {

        if (IS_POST) {
            P($_FILES);

            foreach ($_FILES as $value) {
                foreach ($value["error"] as $k => $v) {
                    if ($v == 1) {
                        echo $err = $value[‘name‘][$k] . ‘超过了php.ini的upload_max_filesize最大上传文件大小‘;
//                        return false;
                    } elseif ($v == 2) {
                        echo $err = $value[‘name‘][$k] . ‘超过了浏览器表单的最大上传文件大小‘;
//                        return false;
                    } elseif ($v == 3) {
                        echo $err = $value[‘name‘][$k] . ‘上传的文件仅部分上传‘;
//                        return false;
                    } elseif ($v == 4) {
                        echo $err = $value[‘name‘][$k] . ‘没有上传文件‘;
//                        return false;
                    } elseif ($v == 6) {
                        echo $err = $value[‘name‘][$k] . ‘缺少系统临时文件夹或者无写入权限‘;
//                        return false;
                    } elseif ($v == 7) {
                        echo $err = $value[‘name‘][$k] . ‘系统错误,写入磁盘失败‘;
//                        return false;
                    } elseif ($v == 8) {
                        echo $err = $value[‘name‘][$k] . ‘PHP扩展程序停止文件上传‘;
//                        return false;
                    }
                }
            }

//            处理文件数组
            $bucketName = Common::getBucketName();
            $ossClient = Common::getOssClient();
            if (is_null($ossClient)) {
                $err = ‘oss对象获取失败!‘;
                return false;
            }
            $upload_root = C(‘SERVERFILE_ROOT‘);
            $category = ‘zx‘;
            $folder = "/{$category}/" . date(‘Ym/d‘, time());

            echo $upload_folder = $upload_root . $folder;
            $objectListing = $ossClient->createObjectDir($bucketName, $upload_folder); //创建目录,防止时间24点出现目录错误 
             upload_folder 注意要为 ‘zx/tt/ll‘,前后不要有/不然会出错
            if ($objectListing[‘info‘][‘http_code‘] != 200) {
                myLog($objectListing, ‘oss_log‘);
                echo $err = ‘文件创建失败‘;
            }
            $filename = array();
            foreach ($_FILES as $value) {
                foreach ($value[‘tmp_name‘] as $k => $v) {
                    $filename[$k][‘name‘] = $value[‘name‘][$k];
                    $filename[$k][‘local_path‘] = $value[‘tmp_name‘][$k];
                    $filename[$k][‘folder‘] = $upload_folder;
                    $filename[$k][‘size‘] = $value[‘size‘][$k];
                    $filename[$k][‘type‘] = $value[‘type‘][$k];
                    $des_name_suffix = substr(strrchr($value[‘name‘][$k], ‘.‘), 1);
                    $des_name = microtime_format(‘YmdHisx‘, microtime(true)) . rand(100, 999) . rand(10, 99);
                    $filename[$k][‘file_name‘] = $des_name . ‘.‘ . $des_name_suffix;
                    $filename[$k][‘extension‘] = $des_name_suffix;
                    $filename[$k][‘destination_name‘] = $bucketName . $filename[$k][‘folder‘] . $des_name . ‘.‘ . $des_name_suffix; //存储在OSS里面最后的名字
                }
            }

            $return_array = array();
            foreach ($filename as $kk => $vv) {
                $return = $ossClient->uploadFile($bucketName, ($upload_folder . ‘/‘ . $vv[‘file_name‘]), $vv[‘local_path‘]);
($upload_folder . ‘/‘ . $vv[‘file_name‘])注意这个目录一定要是 ‘zx/tt/ll‘,前后不要有/不然会出错
                if ($return[‘info‘][‘http_code‘] == 200) {
                    $return_array[$kk][‘savename‘] = $vv[‘file_name‘];
                    $return_array[$kk][‘type‘] = $vv[‘type‘];
                    $return_array[$kk][‘size‘] = $vv[‘size‘];
                    $return_array[$kk][‘extension‘] = $vv[‘extension‘];
                    $return_array[$kk][‘savepath‘] = ‘/‘ . $upload_folder . $vv[‘file_name‘];
                    $return_array[$kk][‘hash‘] = $return[‘content-md5‘];
                    $return_array[$kk][‘oss_url‘] = $return[‘info‘][‘url‘];
                } else {
                    myLog($return, ‘api_log‘);
                    $err = ‘HTTP头部信息返回错误!‘;
                }
            }

            P($filename);
            P($return_array);
        }
        $this->display();
    }

实例demo 请入群下载

时间: 2024-11-02 00:51:24

阿里OSS存储,php版demo的相关文章

阿里云oss存储作一级源站与本地mfs存储作二级源站方案

在百度cdn新建cdn域名,主源站地址填写阿里oss的Bucket 域名meizu-news.oss-cn-hangzhou.aliyuncs.com 2.在百度回源配置里,配置回源hosts 3.在阿里云oss存储页面配置,镜像回二级mfs源站,镜像回源具体说明可参考阿里云官方文档:https://help.aliyun.com/document_detail/31865.html?spm=5176.8466029.retrieving.1.4e9d1450qhzYuu 4.填入mfs的LVS

jeesz分布式架构集成阿里云oss存储

1. 服务接口定义 /** * 文件上传  1:头像 2:显示图片 3:个人封面  :4:基础图片 * @param request * @param response * @param uid 用户id * @param userType 文件上传  1:头像 2:显示图片 3:个人封面  :4:基础图片 0:视频 * @param files 上传的文件对象 * @return * @throws Exception */ @RequestMapping(value = "/upload/b

php将图片存储在阿里云oss存储上

一个配置文件 创建两个方法 1.上传方法 /** * 存储文件 * * @param $srcFile * @param $desFile * @throws Exception */public function storage_save($srcPath, $desPath){ //配置 $accessKeyId = ''; $accessKeySecret = ''; $endpoint = ''; $bucket = ''; $ossClient = new \OSS\OssClient

如何让vue项目跑起来(示例:阿里短视频上传项目vue版demo)

在cmd操作如下:node -vnpm -v 由于有些npm有些资源被屏蔽或者是国外资源的原因,经常会导致用npm安装依赖包的时候失败,所有我还需要npm的国内镜像---cnpmcnpm -v 报错,cnpm不是内部指令.解决办法如下:安装cnpmhttps://jingyan.baidu.com/article/9080802239521cfd90c80f55.html 完成之后,我们就可以用cnpm代替npm来安装依赖包了. 安装vue-cli脚手架构建工具 cnpm install -g

Haproxy内网连接阿里云存储OSS后提供下载

global log 127.0.0.1 local0 maxconn 4096 #最大连接数 chroot /usr/local/haproxy uid 99 #所属运行的用户UID gid 99 #所属运行用用户组 daemon #以后台形式运行HAProxy nbproc 1 #启动1个实例,可以启多个来提高效率 defaults log global mode http option httpclose #每次请求完毕后主动关闭http通道 option redispatch #当ser

选择阿里云数据库HBase版十大理由

根据Gartner的预计,全球非关系型数据库(NoSQL)在2020~2022预计保持在30%左右高速增长,远高于数据库整体市场. 阿里云数据库HBase版也是踏着技术发展的节奏,伴随着NoSQL和大数据技术的兴起和发展,从2010年开始研究和发展.时光荏苒,日月如梭,转眼九年时间,在阿里云上直接开放提供服务也有1年多时间,并在去年的12月份全新发布X-Pack,将单一的HBase演进到一个完整的数据处理平台的能力.我们注意到还有很多同学和客户不清楚HBase X-Pack是什么,什么场景下合适

Dropbox云存储iOS版服务评测

Dropbox的Core API使用Auth 1.0协议来对第三方的应用进行授权,虽然其授权过程比较复杂,但是官方的SDK使用 DBSession类对整个授权认证过程进行了封装,对于开发者来说使用起来也比较简单.Dropbox支持事件记录和文件版本控制,与七牛云.又拍云以及新浪微盘等国内的云盘相比,笔者认为这是一大特色,对于需要这些功能的开发者可以考虑使用Dropbox. 特色功能之一:事件记录功能 事件记录功能是Dropbox一大特色,它可以帮您统计所有的对Dropbox的操作,"事件&quo

小程序---&gt;小程序图片上传阿里OSS使用方法

小程序图片上传阿里OSS使用方法 首先看下参考文档 ( http://blog.csdn.net/qq_38125123/article/details/73870667) 这里只将一些运用过程中遇到的问题及解决办法: 1.cryptojs,sha1js,hmacjs,base64js在哪下载及使用方法: 文件可以在阿里oss实例文档中找到. 在运用过程中如果是通过require引入的,会找不到引入的方法,原因是这些js文档没有模块导出,可以在原文件里找到其顶部全局对象,exports出来即可.

thinkphp5 结合 阿里oss进行多图上传(18年6月28日开发完成)

thinkphp5结合阿里oss 多图上传,刚刚完成 最新的 ,哈哈,我们来看一下. 首先就是下载阿里云的oss包了,我是用composer下载的,下载命令是 composer require aliyuncs/oss-sdk-php  执行完 等着 就行,完事之后会在vendor下生成阿里云的包,如下图所示: 然后 你要准备你的oss一些帐号  ,需要四个东西把 大概 分别是 $accessKeyId, $accessKeySecret, $endpoint,$bucket.其中前2个是自动生