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

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 请入群下载

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

  1. 阿里云存储OSS之九大使用技巧

    http://www.biphp.com/cloud-computing/%E9%98%BF%E9%87%8C%E4%BA%91%E5%AD%98%E5%82%A8oss%E4%B9%8B%E4%B9 ...

  2. Java项目接入阿里云OSS存储

    需求背景 目前公司内部项目所支持的文件云存储方式还是公司内部项目组提供的方案,但在时间的考验之下,弊端显现,尤其是灾备切换过程中需要切换访问地址,这种操作不方便,更可能因为中间过程的失误导致资源不可用 ...

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

    创建两个方法 1.上传方法 use OSS\OssClient; use think\Config; use OSS\Core\OssException; /** * 存储文件 * * @param ...

  4. 备份MySQL数据库并上传到阿里云OSS存储

    1. 环境配置 要将本地文件上传到阿里云oss中, 必须使用阿里云提供的工具 ossutil, 有32位,也有64位的, Linux和Windows都有.具体可以到阿里云官网下载 官网及文档: htt ...

  5. 【工具-代码】OSS阿里云存储服务-代码实现

    上一章节[工具]OSS阿里云存储服务--超级简单--个人还是觉得Fastdfs好玩 https://www.cnblogs.com/Yangbuyi/p/13488323.html 接上一个文章讲解还 ...

  6. 前端(react)上传到阿里云OSS存储 实例

    需求背景 由于现有的后台管理系统,上传的视频越来越大,加上上传视频较慢,后端小哥提出直接从前端上传视频或者其他文件到阿里云OSS存储. 阿里云OSS 阿里云OSS文档介绍,这里不做过多赘述 安装 原本 ...

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

    global log 127.0.0.1 local0 maxconn #最大连接数 chroot /usr/local/haproxy uid #所属运行的用户UID gid #所属运行用用户组 d ...

  8. ASP版_阿里大于短信API Demo

    阿里大于申请地址:http://www.alidayu.com 阿里大于短信发送Demo: ******index.asp************* <%@LANGUAGE="VBSC ...

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

    根据Gartner的预计,全球非关系型数据库(NoSQL)在2020~2022预计保持在30%左右高速增长,远高于数据库整体市场. 阿里云数据库HBase版也是踏着技术发展的节奏,伴随着NoSQL和大 ...

随机推荐

  1. 先从一个 libev 的 demo 入手

    最近想研究下 libev 这个网络库,所以先从官方文档一个最简单的 demo 开始,代码如下: //io.c // a single header file is required #include ...

  2. Spark 精品文章转载(目录)

    学习 Spark 中,别人整理不错的文章,转载至本博客,方便自己学习,并按照不同的模块归档整理.每个文章作者能力不同,写文章所处的时间点不同,可能会略有差异,在阅读的同时,注意当时的文章的内容是否已经 ...

  3. CentOS 7 使用 ACL 设置文件权限

    Linux  系统标准的 ugo/rwx 集合并不允许为不同的用户配置不同的权限,所以 ACL 便被引入了进来,为的是为文件和目录定义更加详细的访问权限,而不仅仅是这些特别指定的特定权限. ACL 可 ...

  4. 【转载】MapReduce编程 Intellij Idea配置MapReduce编程环境

    目录(?)[-] 一软件环境 二创建maven工程 三添加maven依赖 四配置log4j 五启动Hadoop 六运行WordCount从本地读取文件 七运行WordCount从HDFS读取文件 八代 ...

  5. 使用DotfuscatorPro_4.9对软件dll库进行加密

    点击settings选项,Disable String Encryption改成NO,具体里面的设置如下图. 再点击Rename选项下的options,左边的选项勾上,再把Renaming Schem ...

  6. web多站点跨域访问

    有时项目app和m 需要公用一套接口 这个时候就要用到跨域:特别是app接口跨域访问站点时. 跨域配置: 1.iis服务器上需要安装URLwrite2.0 2.web.config 需要添加这个配置: ...

  7. 2.4G还是5G?带你选择最正确的路由器

    智能设备井喷的时代,无线路由器成为家庭中最重要的电器设备.稳定性.连接速度.信号强弱都是无线路由使用体验的重要组成部分.究竟如何选购与配置路由器才能得到最好的用户体验呢? 当你在选购无线路由器的时候是 ...

  8. go get fatal: could not read Username for 'https://code.xxx.org': terminal prompts disabled

    用go get下载私有代码库的时候,莫名其妙产生了以下错误,公有代码库没有影响. chenchideMacBook-Pro:~ chenchi$ go get code.xxx.org/adarch/ ...

  9. mtr命令详解诊断网络路由

    首先安装mtr​# yum -y install mtr ​ ​一般在windows 来判断网络连通性用ping 和tracert, ping的话可以来判断丢包率,tracert可以用来跟踪路由, 在 ...

  10. 使用 ES2015 编写 Gulp 构建

    Gulp 自 v3.9.0 版本增加对 Babel 的支持,也就是说可以使用 ES2015 语法来编写 gulp 任务. 检查 gulp 版本 $ gulp -v 确保 gulp-cli 和 gulp ...