php sdk设置文件访问权限
详细解答可以参考官方帮助文档您可以通过一系列的接口管理存储空间(Bucket)下的文件(Object)。管理文件的完整代码请参见:GitHub。
判断文件是否存在以下代码用于判断指定的文件是否存在:
phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = '';$accessKeySecret = '';// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = 'http://oss-cn-hangzhou.aliyuncs.com';$bucket= '';$object = '';try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $exist = $ossClient->doesObjectExist($bucket, $object);} catch(OssException $e) { printf(__FUNCTION__ . ': FAILED\n'); printf($e->getMessage() . '\n'); return;}print(__FUNCTION__ . ': OK' . '\n');var_dump($exist);
文件访问权限文件的访问权限(ACL)有以下四种:
访问权限
描述
访问权限值
继承Bucket
文件遵循存储空间的访问权限。
default
私有
文件的拥有者和授权用户有该文件的读写权限,其他用户没有权限操作该文件。
private
公共读
文件的拥有者和授权用户有该文件的读写权限,其他用户只有文件的读权限。请谨慎使用该权限。
public-read
公共读写
所有用户都有该文件的读写权限。请谨慎使用该权限。
public-read-write
文件的访问权限优先级高于存储空间的访问权限。例如存储空间的访问权限是私有,而文件的访问权限是公共读写,则所有用户都有该文件的读写权限。如果某个文件没有设置过访问权限,则遵循存储空间的访问权限。
设置文件访问权限以下代码用于设置指定文件的访问权限:
phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = '';$accessKeySecret = '';// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = 'http://oss-cn-hangzhou.aliyuncs.com';$bucket= '';$object = '';// 设置文件的访问权限为公共读,默认为继承Bucket。$acl = 'public-read';try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->putObjectAcl($bucket, $object, $acl);} catch (OssException $e) { printf(__FUNCTION__ . ': FAILED\n'); printf($e->getMessage() . '\n'); return;}print(__FUNCTION__ . ': OK' . '\n');
获取文件访问权限以下代码用于获取指定文件的访问权限:
phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = '';$accessKeySecret = '';// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = 'http://oss-cn-hangzhou.aliyuncs.com';$bucket= '';$object = '';try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $objectAcl = $ossClient->getObjectAcl($bucket, $object);} catch (OssException $e) { printf(__FUNCTION__ . ': FAILED\n'); printf($e->getMessage() . '\n'); return;}print(__FUNCTION__ . ': OK' . '\n');var_dump($objectAcl);
文件元信息文件元信息(Object Meta)详情请参见开发指南中的文件元信息。
设置文件元信息以下代码用于设置文件元信息:
phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = '';$accessKeySecret = '';// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = 'http://oss-cn-hangzhou.aliyuncs.com';$bucket= '';$object = '';$content = file_get_contents(__FILE__);$options = array( OssClient::OSS_HEADERS => array( 'Expires' => '2012-10-01 08:00:00', 'Content-Disposition' => 'attachment; filename='xxxxxx'', 'x-oss-meta-self-define-title' => 'user define meta info', ));try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->putObject($bucket, $object, $content, $options);} catch(OssException $e) { printf(__FUNCTION__ . ': FAILED\n'); printf($e->getMessage() . '\n'); return;}print(__FUNCTION__ . ': OK' . '\n');
修改文件元信息以下代码用于修改文件元信息:
phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;/// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = '';$accessKeySecret = '';// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = 'http://oss-cn-hangzhou.aliyuncs.com';$fromBucket = '';$fromObject = '';$toBucket = '';$toObject = '';$copyOptions = array( OssClient::OSS_HEADERS => array( 'Expires' => '2018-10-01 08:00:00', 'Content-Disposition' => 'attachment; filename='xxxxxx'', 'x-oss-meta-location' => 'location', ),);try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->copyObject($fromBucket, $fromObject, $toBucket, $toObject, $copyOptions);} catch(OssException $e) { printf(__FUNCTION__ . ': FAILED\n'); printf($e->getMessage() . '\n'); return;}print(__FUNCTION__ . ': OK' . '\n');
获取文件元信息以下代码用于获取文件元信息:
phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = '';$accessKeySecret = '';// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = 'http://oss-cn-hangzhou.aliyuncs.com';$bucket= '';$object = '';try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $objectMeta = $ossClient->getObjectMeta($bucket, $object);} catch (OssException $e) { printf(__FUNCTION__ . ': FAILED\n'); printf($e->getMessage() . '\n'); return;}print(__FUNCTION__ . ': OK' . '\n');if (isset($objectMeta[strtolower('Content-Disposition')]) && 'attachment; filename='xxxxxx'' === $objectMeta[strtolower('Content-Disposition')]) { print(__FUNCTION__ . ': ObjectMeta checked OK' . '\n');} else { print(__FUNCTION__ . ': ObjectMeta checked FAILED' . '\n');}
列举文件列举所有文件以下代码用于列举指定存储空间下的所有文件:
phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = '';$accessKeySecret = '';// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = 'http://oss-cn-hangzhou.aliyuncs.com';$bucket= '';$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);while (true) { try { $listObjectInfo = $ossClient->listObjects($bucket, $options); } catch (OssException $e) { printf(__FUNCTION__ . ': FAILED\n'); printf($e->getMessage() . '\n'); return; } // 得到nextMarker,从上一次listObjects读到的最后一个文件的下一个文件开始继续获取文件列表。 $nextMarker = $listObjectInfo->getNextMarker(); $listObject = $listObjectInfo->getObjectList(); $listPrefix = $listObjectInfo->getPrefixList(); if (!empty($listObject)) { print('objectList:\n'); foreach ($listObject as $objectInfo) { print($objectInfo->getKey() . '\n'); } } if (!empty($listPrefix)) { print('prefixList: \n'); foreach ($listPrefix as $prefixInfo) { print($prefixInfo->getPrefix() . '\n'); } } if ($nextMarker === '') { break; }}
列举指定条件的文件以下代码用于列举指定条件的文件:
phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = '';$accessKeySecret = '';// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = 'http://oss-cn-hangzhou.aliyuncs.com';$bucket= '';$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);$prefix = 'dir/';$delimiter = '/';$nextMarker = '';$maxkeys = 10;$options = array( 'delimiter' => $delimiter, 'prefix' => $prefix, 'max-keys' => $maxkeys, 'marker' => $nextMarker,);try { $listObjectInfo = $ossClient->listObjects($bucket, $options);} catch (OssException $e) { printf(__FUNCTION__ . ': FAILED\n'); printf($e->getMessage() . '\n'); return;}print(__FUNCTION__ . ': OK' . '\n');$objectList = $listObjectInfo->getObjectList(); // object list$prefixList = $listObjectInfo->getPrefixList(); // directory listif (!empty($objectList)) { print('objectList:\n'); foreach ($objectList as $objectInfo) { print($objectInfo->getKey() . '\n'); }}if (!empty($prefixList)) { print('prefixList: \n'); foreach ($prefixList as $prefixInfo) { print($prefixInfo->getPrefix() . '\n'); }}
上述例子中的$options包含的参数如下:
参数
说明
是否必需
delimiter
对文件名称进行分组的一个字符。CommonPrefixes是以delimiter结尾,并有共同前缀的文件集合。
否
prefix
本次查询结果的前缀。
否
max-keys
列举文件的最大个数。默认为100,最大值为1000。
否
marker
标明本次列举文件的起点。
否
删除文件删除单个文件以下代码用于删除单个文件:
phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = '';$accessKeySecret = '';// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = 'http://oss-cn-hangzhou.aliyuncs.com';$bucket= '';$object = '';try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->deleteObject($bucket, $object);} catch(OssException $e) { printf(__FUNCTION__ . ': FAILED\n'); printf($e->getMessage() . '\n'); return;}print(__FUNCTION__ . ': OK' . '\n');
删除多个文件以下代码用于批量删除文件:
phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = '';$accessKeySecret = '';// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = 'http://oss-cn-hangzhou.aliyuncs.com';$bucket= '';$objects = array();$objects[] = '';$objects[] = '';try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->deleteObjects($bucket, $objects);} catch(OssException $e) { printf(__FUNCTION__ . ': FAILED\n'); printf($e->getMessage() . '\n'); return;}print(__FUNCTION__ . ': OK' . '\n');
拷贝文件简单拷贝以下代码用于拷贝小于1GB的文件:
phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = '';$accessKeySecret = '';// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = 'http://oss-cn-hangzhou.aliyuncs.com';$from_bucket = '';$from_object = '';$to_bucket = $bucket;$to_object = $from_object . '.copy';try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->copyObject($from_bucket, $from_object, $to_bucket, $to_object);} catch(OssException $e) { printf(__FUNCTION__ . ': FAILED\n'); printf($e->getMessage() . '\n'); return;}print(__FUNCTION__ . ': OK' . '\n');`
拷贝大文件对于大于1GB的文件,需要使用分片拷贝。分片拷贝分为三步:
通过$ossClient->initiateMultipartUpload初始化分片拷贝任务。通过$ossClient->uploadPartCopy进行分片拷贝。除最后一个分片外,其它分片都要大于100KB。通过$ossClient->completeMultipartUpload提交分片拷贝任务。
以下代码用于分片拷贝:
phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = '';$accessKeySecret = '';// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = 'http://oss-cn-hangzhou.aliyuncs.com';$src_bucket = '';$src_object = '';$dst_bucket = '';$dst_object = '';try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); // 初始化分片。 $upload_id = $ossClient->initiateMultipartUpload($dst_bucket, $dst_object); $copyId = 1; // 逐个分片拷贝。 $eTag = $ossClient->uploadPartCopy( $src_bucket, $src_object, $dst_bucket, $dst_object,$copyId, $upload_id); $upload_parts[] = array( 'PartNumber' => $copyId, 'ETag' => $eTag, ); // 完成分片拷贝。 $result = $ossClient->completeMultipartUpload($dst_bucket, $dst_object, $upload_id, $upload_parts);} catch(OssException $e) { printf(__FUNCTION__ . ': FAILED\n'); printf($e->getMessage() . '\n'); return;}print(__FUNCTION__ . ': OK' . '\n');
解冻归档文件归档类型(Archive)的文件需要解冻(Restore)之后才能读取。非归档类型的文件,不要调用restoreObject方法。
归档文件的状态变换过程如下:
归档类型的文件初始时处于冷冻状态。提交解冻操作后,服务端执行解冻,文件处于解冻中的状态。完成解冻后,可以读取文件。解冻状态默认持续1天,最多延长7天,之后文件又回到冷冻状态。
以下代码用于解冻归档文件:
phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = '';$accessKeySecret = '';// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = 'http://oss-cn-hangzhou.aliyuncs.com';$bucket= '';$object = '';try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->restoreObject($bucket, $object);} catch (OssException $e) { printf(__FUNCTION__ . ': FAILED\n'); printf($e->getMessage() . '\n'); return;}print(__FUNCTION__ . ': OK' . '\n');
存储类型详情请参见存储类型。
符号链接创建符号链接符号链接是一种特殊的文件,它指向某个具体的文件,类似于Windows上使用的快捷方式。符号链接支持自定义元信息。
以下代码用于创建符号链接:
phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = '';$accessKeySecret = '';// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = 'http://oss-cn-hangzhou.aliyuncs.com';$bucket= '';$object = '';$symlink = '';try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->putSymlink($bucket, $symlink, $object);} catch (OssException $e) { printf(__FUNCTION__ . ': FAILED\n'); printf($e->getMessage() . '\n'); return;}print(__FUNCTION__ . ': OK' . '\n');
获取符号链接指向的文件内容获取符号链接要求您对该符号链接有读权限。以下代码用于获取符号链接指向的文件内容:
phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = '';$accessKeySecret = '';// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = 'http://oss-cn-hangzhou.aliyuncs.com';$bucket= '';$symlink = '';try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $Symlinks = $ossClient->getSymlink($bucket, $symlink);} catch (OssException $e) { printf(__FUNCTION__ . ': FAILED\n'); printf($e->getMessage() . '\n'); return;}print(__FUNCTION__ . ': OK' . '\n');var_dump($Symlinks);
开启MD5校验MD5校验用于确保数据传输的完整性。使用MD5校验时,性能会有所损失。上传文件时默认关闭MD5校验。
以下代码用于上传文件时开启MD5校验:
phpif (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php';}if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php';}use OSS\OssClient;use OSS\Core\OssException;// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = '';$accessKeySecret = '';// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = 'http://oss-cn-hangzhou.aliyuncs.com';$bucket= '';$object = '';$options = array(OssClient::OSS_CHECK_MD5 => true);try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->uploadFile($bucket, $object, __FILE__, $options);} catch(OssException $e) { printf(__FUNCTION__ . ': FAILED\n'); printf($e->getMessage() . '\n'); return;}print(__FUNCTION__ . ': OK' . '\n');
putObject、uploadFile、appendObject、appendFile、multiuploadFile方法支持开启MD5校验。
赞0
踩1