开发者社区> 问答> 正文

PHP-SDK之如何实现管理文件(二)?


删除多个文件


您可以使用OssClient::deleteObjects批量删除多个文件:

  1. <?php
  2. /**
  3. * 批量删除object
  4. *
  5. * @param OssClient $ossClient OSSClient实例
  6. * @param string $bucket bucket名字
  7. * @return null
  8. */
  9. function deleteObjects($ossClient, $bucket)
  10. {
  11.     $objects = array();
  12.     $objects[] = "oss-php-sdk-test/upload-test-object-name.txt";
  13.     $objects[] = "oss-php-sdk-test/upload-test-object-name.txt.copy";
  14.     try{
  15.         $ossClient->deleteObjects($bucket, $objects);
  16.     } catch(OssException $e) {
  17.         printf(__FUNCTION__ . ": FAILED\n");
  18.         printf($e->getMessage() . "\n");
  19.         return;
  20.     }
  21.     print(__FUNCTION__ . ": OK" . "\n");
  22. }


拷贝文件


您可以使用OssClient::copyObject拷贝文件:
  1. <?php
  2. /**
  3. * 拷贝object
  4. *
  5. * @param OssClient $ossClient OSSClient实例
  6. * @param string $bucket bucket名字
  7. * @return null
  8. */
  9. function copyObject($ossClient, $bucket)
  10. {
  11.     $from_bucket = $bucket;
  12.     $from_object = "oss-php-sdk-test/upload-test-object-name.txt";
  13.     $to_bucket = $bucket;
  14.     $to_object = $from_object . '.copy';
  15.     try{
  16.         $ossClient->copyObject($from_bucket, $from_object, $to_bucket, $to_object);
  17.     } catch(OssException $e) {
  18.         printf(__FUNCTION__ . ": FAILED\n");
  19.         printf($e->getMessage() . "\n");
  20.         return;
  21.     }
  22.     print(__FUNCTION__ . ": OK" . "\n");
  23. }

注意:
  • OssClient::copyObject可以拷贝小于1GB的文件。拷贝一个大于1GB的文件时,请使用OssClient::uploadPartCopy。


修改文件元信息(Object Meta)


文件元信息(Object Meta),是对用户上传到OSS的文件的属性描述,分为两种:HTTP标准属性(HTTP Headers)和User Meta(用户自定义元信息)。文件元信息可以在各种方式上传或者拷贝文件时进行设置。
HTTP标准属性,Cache-Control、Content-Disposition、Content-Encoding、Content-Language、Expires、Content-Length、Content-Type、Last-Modified等。
为了便于用户对Object进行更多描述。OSS中规定所有以x-oss-meta-为前缀的参数,则视为User Meta比如x-oss-meta-location。一个Object可以有多个类似的参数,但所有的User Meta总大小不能超过8k。这些User Meta信息会在下载文件/获取文件元数据时返回。
更多文件元信息的介绍,请参看 文件元信息
可以通过拷贝操作来实现修改已有文件元信息。如果拷贝操作的源文件地址和目标文件地址相同,都会直接替换源文件的文件元信息。
  1. /**
  2. * 修改文件元信息
  3. * 利用copyObject接口的特性:当目的object和源object完全相同时,表示修改object的文件元信息
  4. *
  5. * @param OssClient $ossClient OSSClient实例
  6. * @param string $bucket 存储空间名称
  7. * @return null
  8. */
  9. function modifyMetaForObject($ossClient, $bucket)
  10. {
  11.     $fromBucket = $bucket;
  12.     $fromObject = "oss-php-sdk-test/upload-test-object-name.txt";
  13.     $toBucket = $bucket;
  14.     $toObject = $fromObject;
  15.     $copyOptions = array(
  16.         OssClient::OSS_HEADERS => array(
  17.             'Expires' => '2018-10-01 08:00:00',
  18.             'Content-Disposition' => 'attachment; filename="xxxxxx"',
  19.             'x-oss-meta-location' => 'location',
  20.         ),
  21.     );
  22.     try{
  23.         $ossClient->copyObject($fromBucket, $fromObject, $toBucket, $toObject, $copyOptions);
  24.     } catch(OssException $e) {
  25.         printf(__FUNCTION__ . ": FAILED\n");
  26.         printf($e->getMessage() . "\n");
  27.         return;
  28.     }
  29.     print(__FUNCTION__ . ": OK" . "\n");
  30. }

提示:
  • 通过修改文件的Content-Type,可以修改文件的类型。
  • 通过修改文件的Content-Disposition,可以控制文件的下载行为。


获取文件的文件元信息(Object Meta)


您可以使用OssClient::getObjectMeta获取文件的文件元信息:
  1. <?php
  2. /**
  3. * 获取object meta, 也就是getObjectMeta接口
  4. *
  5. * @param OssClient $ossClient OssClient实例
  6. * @param string $bucket 存储空间名称
  7. * @return null
  8. */
  9. function getObjectMeta($ossClient, $bucket)
  10. {
  11.     $object = "oss-php-sdk-test/upload-test-object-name.txt";
  12.     try {
  13.         $objectMeta = $ossClient->getObjectMeta($bucket, $object);
  14.     } catch (OssException $e) {
  15.         printf(__FUNCTION__ . ": FAILED\n");
  16.         printf($e->getMessage() . "\n");
  17.         return;
  18.     }
  19.     print(__FUNCTION__ . ": OK" . "\n");
  20.     if (isset($objectMeta[strtolower('Content-Disposition')]) &&
  21.         'attachment; filename="xxxxxx"' === $objectMeta[strtolower('Content-Disposition')]
  22.     ) {
  23.         print(__FUNCTION__ . ": ObjectMeta checked OK" . "\n");
  24.     } else {
  25.         print(__FUNCTION__ . ": ObjectMeta checked FAILED" . "\n");
  26.     }
  27. }


设置文件访问权限


Object有四种访问权限:default(默认),private(私有读写), public-read(公共读私有写), public-read-write(公共读写),含义如下:
权限描述PHP SDK对应值
默认Objec是遵循Bucket的读写权限,即Bucket是什么权限,Object就是什么权限,Object的默认权限default
私有读写Object是私有资源,即只有该Object的Owner拥有该Object的读写权限,其他的用户没有权限操作该Objectprivate
公共读私有写Object是公共读资源,即非Object Owner只有Object的读权限,而Object Owner拥有该Object的读写权限public-read
公共读写Object是公共读写资源,即所有用户拥有对该Object的读写权限public-read-write

Object的权限优先级高于Bucket。例如Bucket是private的,而Object ACL是公共读写,则访问这个Object时,先判断Object的ACL,所有用户都拥有这个Object的访问权限,即使这个Bucket是private。如果某个Object从来没设置过ACL,则访问权限遵循Bucket ACL。
您可以使用OssClient::putObjectAcl设置文件的访问权限:
  1. <?php
  2. /**
  3. * 获取文件范围权限
  4. *
  5. * @param OssClient $ossClient OssClient实例
  6. * @param string $bucket 存储空间名称
  7. * @return null
  8. */
  9. function putObjectAcl($ossClient, $bucket)
  10. {
  11.     $object = "oss-php-sdk-test/upload-test-object-name.txt";
  12.     $acl = "public-read";
  13.     try {
  14.         $ossClient->putObjectAcl($bucket, $object, $acl);
  15.     } catch (OssException $e) {
  16.         printf(__FUNCTION__ . ": FAILED\n");
  17.         printf($e->getMessage() . "\n");
  18.         return;
  19.     }
  20.     print(__FUNCTION__ . ": OK" . "\n");
  21. }


获取文件访问权限


您可以使用OssClient::getObjectAcl获取文件的访问权限:
  1. <?php
  2. /**
  3. * 获取object的访问权限
  4. *
  5. * @param OssClient $ossClient OssClient实例
  6. * @param string $bucket 存储空间名称
  7. * @return null
  8. */
  9. function getObjectMeta($ossClient, $bucket)
  10. {
  11.     $object = "oss-php-sdk-test/upload-test-object-name.txt";
  12.     try {
  13.         $objectAcl = $ossClient->getObjectAcl($bucket, $object);
  14.     } catch (OssException $e) {
  15.         printf(__FUNCTION__ . ": FAILED\n");
  16.         printf($e->getMessage() . "\n");
  17.         return;
  18.     }
  19.     print(__FUNCTION__ . ": OK" . "\n");
  20.     var_dump($objectAcl);
  21. }

展开
收起
青衫无名 2017-10-19 10:03:17 2201 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载
PHP安全开发:从白帽角度做安全 立即下载
复杂PHP系统性能瓶颈排查及优化 立即下载