Php 谷歌云存储-通过通配符获取对象

Php 谷歌云存储-通过通配符获取对象,php,google-cloud-storage,Php,Google Cloud Storage,因此,使用gsutil,我可以运行以下命令: gsutil ls gs://<my bucket name>/AR7020014/agent_directory_photos/adp_42643_* gsutil ls gs:///AR7020014/agent\u directory\u photos/adp\u 42643_* 并获取文件名列表。我真的很想在我的PHP代码中这样做。我试过了 这: $service=新的谷歌服务存储($authenticated\u客户端);

因此,使用gsutil,我可以运行以下命令:

gsutil ls gs://<my bucket name>/AR7020014/agent_directory_photos/adp_42643_*
gsutil ls gs:///AR7020014/agent\u directory\u photos/adp\u 42643_*
并获取文件名列表。我真的很想在我的PHP代码中这样做。我试过了 这:

$service=新的谷歌服务存储($authenticated\u客户端);
$params=['prefix'=>'AR7020014/agent_directory_photos/adp_42643_*',maxResults 10];
$objects=$service->objects->listObjects(,$params);

但返回的对象集不包含任何项。我不想做目录扫描,这个特定文件夹中的文件数量可能会非常大

GCS对象列表前缀是普通字符串,不支持通配符。gsutil通过前缀请求(如果用户指定的请求恰好以非通配符开头)和客户端筛选通配符匹配的组合来实现通配符。例如,
gsutil ls gs://bucket/abc[1-3]*
将通过发送prefix=“abc”请求来实现,然后在本地筛选与完整通配符表达式匹配的响应


要从PHP实现,您必须自己实现类似的功能。

谷歌云存储API不支持通配符。您可以使用
前缀
分隔符
参数来模拟此操作

$params = [ 
    'prefix' => 'AR7020014/agent_directory_photos/adp_42643_', 
    'delimiter' => '/',
    maxResults => 10 ];

此参数将导致
listObjects()
返回所有以
前缀开始的对象。

好的,我刚刚测试了这个,并得到了Mike Schwartz的确认。实现此功能的方法是将前缀仅设为文件夹名称(“AR7020014/agent\u directory\u photos”),并添加一个新参数:

'marker' => 'adp_42643'
我的限制是,这也将返回类似于“adp_42644”等的文件。因为我知道我总是只有10或12个文件与我想要的匹配,所以我设置:

'maxResults' => 15

然后,我有一组多达15个Google_服务_存储_存储对象要遍历,以获得我真正想要的东西。虽然没有通配符那么好,但它会的。

谢谢,迈克,我刚刚通过实验发现了这一点。
'maxResults' => 15