3

假设一个平面 Amazon S3 存储桶中有 200,000 个图像。

桶看起来像这样:

000000-1.jpg
000000-2.jpg
000000-3.jpg
000000-4.jpg
000001-1.jpg
000001-2.jpg
000002-1.jpg
...
ZZZZZZ-9.jpg
ZZZZZZ-10.jpg

(一个 6 位哈希,后跟一个计数,然后是扩展名)

如果我需要所有匹配的文件000001-*.jpg,最有效的方法是什么?

在 PHP 中,我会rglob($path,'{000001-*.jpg}',GLOB_BRACE)用来获取一系列匹配项,但我认为这不能远程工作。

我可以获取存储桶中所有文件的列表,然后在数组中查找匹配项,但这似乎是一个昂贵的请求。

你有什么建议吗?

4

1 回答 1

8

Amazon 提供了一种直接使用 S3 api 执行此操作的方法。

您可以prefix在调用列出 S3 对象时使用该选项以仅返回以前缀开头的对象。例如使用适用于 PHP 的 AWS 开发工具包:

// Instantiate the class
$s3 = new AmazonS3();

$response = $s3->list_objects('my-bucket', array(
    'prefix' => '000001-'
));

// Success?
var_dump($response->isOK());
var_dump(count($response->body->Contents))

您可能还会发现该delimiter选项很有用 - 您可以使用它来获取所有唯一 6 位哈希的列表。

于 2012-05-15T18:23:14.390 回答