/** * 获取 bucket 中的 object 列表 * * @param string $bucket Bucket 名称 * @param string $prefix Object 名称的前缀 * @param string $marker Marker (返回 marker 之后的 object 列表,不包含 marker) * @param string $limit 最大返回的 Object 数目 * @param string $delimiter 分隔符 * @return array | false */ public static function getBucket($bucket, $prefix = null, $marker = null, $limit = 1000, $delimiter = null, $keyword = null) { $result = array(); do { $rest = new StorageRequest('GET', self::$__account, $bucket, '', self::$endpoint); $rest->setParameter('format', 'json'); if ($prefix !== null && $prefix !== '') { $rest->setParameter('prefix', $prefix); } if ($marker !== null && $marker !== '') { $rest->setParameter('marker', $marker); } if ($delimiter !== null && $delimiter !== '') { $rest->setParameter('delimiter', $delimiter); } if ($keyword !== null && $keyword !== '') { $rest->setParameter('keyword', $keyword); } else { if (!empty(self::$defDelimiter)) { $rest->setParameter('delimiter', self::$defDelimiter); } } if ($limit > 1000) { $max_keys = 1000; } else { $max_keys = $limit; } $rest->setParameter("limit", $max_keys); $limit -= 1000; $response = $rest->getResponse(); if ($response->error === false && $response->code !== 200) { $response->error = array('code' => $response->code, 'message' => 'Unexpected HTTP status'); } if ($response->error !== false) { self::__triggerError(sprintf("Storage::getBucket(): [%s] %s", $response->error['code'], $response->error['message']), __FILE__, __LINE__); return false; } $objects = json_decode($response->body, True); if ($objects === False) { self::__triggerError(sprintf("Storage::getBucket(): invalid body: %s", $response->body), __FILE__, __LINE__); return false; } if ($objects) { $result = array_merge($result, $objects); $marker = end($objects); $marker = $marker['name']; } } while ($objects && count($objects) == $max_keys && $limit > 0); return $result; }