开发者社区> 问答> 正文

关于php操作oss的问题

本人小白,刚学习php操作oss。最近一直搞不明白  如何展示自己某一个bucket下的object列表???

并不是来求代码,只是希望有人能提供一些思路。

小弟先在此跪谢!

展开
收起
na-huan-jie 2015-07-08 15:41:59 5712 0
3 条回答
写回答
取消 提交回答
  • 回2楼robertzh的帖子
    这是sdk.class.php中的源代码:
    **
         * List Object
         * @param string $bucket (Required)
         * @param array $options (Optional)
         * 其中options中的参数如下
         * $options = array(
         *         'max-keys'     => max-keys用于限定此次返回object的最大数,如果不设定,默认为100,max-keys取值不能大于100。
         *         'prefix'    => 限定返回的object key必须以prefix作为前缀。注意使用prefix查询时,返回的key中仍会包含prefix。
         *         'delimiter' => 是一个用于对Object名字进行分组的字符。所有名字包含指定的前缀且第一次出现delimiter字符之间的object作为一组元素
         *         'marker'    => 用户设定结果从marker之后按字母排序的第一个开始返回。
         * )
         * 其中 prefix,marker用来实现分页显示效果,参数的长度必须小于256字节。
         * @throws OSS_Exception
         * @author xiaobing.meng@alibaba-inc.com
         * @since 2011-11-14
         * @return ResponseCore
         */
        public function list_object($bucket, $options = NULL){
            //options
            $this->validate_options($options);

            if(!$options){
                $options = array();
            }

            //bucket
            $this->is_empty($bucket,OSS_BUCKET_IS_NOT_ALLOWED_EMPTY);

            $options[self::OSS_BUCKET] = $bucket;
            $options[self::OSS_METHOD] = self::OSS_HTTP_GET;
            $options[self::OSS_OBJECT] = '/';
            $options[self::OSS_HEADERS] = array(
            self::OSS_DELIMITER => isset($options[self::OSS_DELIMITER])?$options[self::OSS_DELIMITER]:'/',
            self::OSS_PREFIX => isset($options[self::OSS_PREFIX])?$options[self::OSS_PREFIX]:'',
            self::OSS_MAX_KEYS => isset($options[self::OSS_MAX_KEYS])?$options[self::OSS_MAX_KEYS]:self::OSS_MAX_KEYS_VALUE,
            self::OSS_MARKER => isset($options[self::OSS_MARKER])?$options[self::OSS_MARKER]:'',
            );    
            $response = $this->auth ( $options );
            return $response;
        }

    这是我调用后得到的结果如图


    我只想得到object的名字和创建时间,请问要怎么剥离出来?

    -------------------------

    Re关于php操作oss的问题
    人工置顶!
    2015-07-09 16:34:07
    赞同 展开评论 打赏
  • 按照api文檔調用就好啦
    2015-07-09 07:48:03
    赞同 展开评论 打赏
  • public function testListObjectToList()
        {
            $oss = $this->oss;
            $bucket = $this->bucket;
            $prefix = '';
            $marker = '';
            $delimiter = '';
            $next_marker = '';
            $maxkeys = 1;
            while (true)
            {
                $options = array(
                    'delimiter' => $delimiter,
                    'prefix' => $prefix,
                    'max-keys' => $maxkeys,
                    'marker' => $next_marker,
                );
                $res = $oss->list_object($bucket, $options);
                $this->assertEquals(200, $res->status);

                $body = $res->body;
                $tmp_object_list = OSSUtil::get_object_list_marker_from_xml($body, $next_marker);
                foreach($tmp_object_list as $object)
                {
                    #get object meta
                    $res = $oss->get_object_meta($bucket, $object);
                    $this->assertEquals(200, $res->status);

                }

                if (empty($next_marker))
                {
                    break;
                }
            }
    }

        public static function get_object_list_marker_from_xml($xml, &$marker)
        {
            $xml = new SimpleXMLElement($xml);
            $is_truncated = $xml->IsTruncated;
            $object_list = array();
            $marker = $xml->NextMarker;
            foreach ( $xml->Contents as $content) {
                array_push($object_list, $content->Key);
            }
            return $object_list;
        }
    2015-07-08 17:46:10
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载
PHP安全开发:从白帽角度做安全 立即下载
复杂PHP系统性能瓶颈排查及优化 立即下载