**文件管理** ############################## 在NOS中,用户可以通过一系列的接口管理桶(Bucket)中的文件(Object),比如ListObjects,DeleteObject,CopyObject,DoesObjectExist等。 列出桶中的文件 ============================= 您可以使用NosClient::listObjects列出存储中间中的文件:: putObject($bucket, "dir/obj" . strval($i), "hi"); } $prefix = 'dir/'; $delimiter = '/'; $nextMarker = ''; $maxkeys = 30; while (true) { $options = array( 'delimiter' => $delimiter, 'prefix' => $prefix, 'max-keys' => $maxkeys, 'marker' => $nextMarker, ); var_dump($options); try { $listObjectInfo = $nosClient->listObjects($bucket, $options); } catch (NosException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } var_dump($listObjectInfo); // 得到nextMarker,从上一次listObjects读到的最后一个文件的下一个文件开始继续获取文件列表 $nextMarker = $listObjectInfo->getNextMarker(); $listObject = $listObjectInfo->getObjectList(); var_dump($listObject); if ($nextMarker === '') { break; } } } 上述代码中的$options中的参数如下所示: +------------------------+---------------------------------------------------------------------------------------------------------+ |参数 | 说明 | +========================+=========================================================================================================+ | delimiter |用于对Object名字进行分组的字符。所有名字包含指定的前缀且第一次出现delimiter字符之间的object作为一组元素 | +------------------------+---------------------------------------------------------------------------------------------------------+ | prefix |限定返回的object key必须以prefix作为前缀。注意使用prefix查询时,返回的key中仍会包含prefix | +------------------------+---------------------------------------------------------------------------------------------------------+ | max-keys |限定此次返回object的最大数,如果不设定,默认为100 | +------------------------+---------------------------------------------------------------------------------------------------------+ | marker |设定结果从marker之后按字母排序的第一个开始返回 | +------------------------+---------------------------------------------------------------------------------------------------------+ .. note:: 上述表中的参数都是可选参数 判断文件是否存在 ============================ 您可以使用NosClient::doesObjectExist判断文件是否存在:: doesObjectExist($bucket, $object); } catch(NosException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } print(__FUNCTION__ . ": OK" . "\n"); var_dump($exist); } 删除单个文件 =========================== 您可以使用NosClient::deleteObject删除单个需要删除的文件:: deleteObject($bucket, $object); } catch(NosException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } print(__FUNCTION__ . ": OK" . "\n"); } 删除多个文件 ============================ 您可以使用NosClient::deleteObjects批量删除文件:: deleteObjects($bucket, $objects); } catch(NosException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } print(__FUNCTION__ . ": OK" . "\n"); } 拷贝文件 =========================== 您可以使用NosClient::copyObject拷贝文件:: copyObject($from_bucket, $from_object, $to_bucket, $to_object); } catch(NosException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } print(__FUNCTION__ . ": OK" . "\n"); } .. attention:: 1. 支持跨桶的文件copy 移动文件 =========================== 您可以使用NosClient::moveObject移动文件:: moveObject($from_bucket, $from_object, $to_bucket, $to_object); } catch(NosException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } print(__FUNCTION__ . ": OK" . "\n"); } .. attention:: 1.暂时不支持跨桶的文件move 修改文件元信息 ========================== 暂时不提供此类方法 获取文件的文件元信息 ========================== 您可以使用NosClient::getObjectMeta获取对象的元数据信息:: getObjectMeta($bucket, $object); } catch (NosException $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"); } } .. attention:: 1. 获取的元数据通过一个array返回,返回值为HTTP头类型的元数据与用户自定义元数据 2. 元数据名的大小均为小写