0

我尝试将 softlayer 对象存储与 api-client 一起使用。 软层对象存储 php

我的目标是按文件名搜索,并查看文件是否存在。

单字节文件名(例如 a.jpg)正确的结果。多字节文件名(日本语.jpg)结果不正确。

我的容器是photo,没有子目录。

sjc01/photo/a.jpg  
sjc01/photo/日本語.jpg  
sjc01/photo/multibyte_filename.jpg  
sjc01/photo/anytime with space.jpg  
...  

下面的代码

<?php
    include('/includes/lib/ObjectStorage/Util.php');
    $tokenStore = ObjectStorage_TokenStore::factory('file', array('ttl' => 3600, 'path' => '/tmp/objectStorage'));
    #give the write permission in /tmp/objectStorage
    ObjectStorage::setTokenStore($tokenStore);

    $host = 'https://sjc01.objectstorage.softlayer.net/auth/v1.0';
    $username='SLXXXXXXXXXXX';
    $password='XXXXXXXXXXXXX';
    $options = array('adapter' => ObjectStorage_Http_Client::SOCKET, 'timeout' => 10);

    $objectStorage = new ObjectStorage($host, $username, $password, $options);
    $containerList = $objectStorage->with('photo')
                            ->setContext('search')
                            ->setFilter('type', 'object')
                            ->setFilter('q.name', "multibytefilename.jpg")
                            ->setMime('json')
                            ->get();
    var_dump($containerList);

结果 objectCount 100 不正确。我希望 objectCount 1。

返回值部分的结尾。

["context":protected]=>  
string(6) "SEARCH" 
["containerCount":protected]=>  
int(0)  
["objectCount":protected]=>  
int(100)  

我需要状态存在。
有人有任何想法或正确的方法吗?
谢谢你。

4

1 回答 1

0

我认为您查询的是返回所有对象 .jpg。尝试这个:

$containerList = $objectStorage->with('test')
                            ->setContext('search')
                            ->setFilter('type', 'object')
                            ->setFilter('q.name', "a.jpg")
                            ->setMime('json')
                            ->get();
    var_dump($containerList);

如果我没记错,您需要指定要查找的属性(在本例中为名称)

此处有关您可以在查询搜索中使用的字段的更多信息。http://sldn.softlayer.com/article/API-Operations-Search-Services

我希望它对你有帮助。

于 2016-03-28T16:11:01.553 回答