3

使用 Rackspace Cloud API [ Github ]的非官方Perl 绑定,我无法终生设置或检索给定对象的元数据。

我可以成功地从云中拉下文件,但是当我object_metadata按照文档中的定义调​​用时,我收到一个错误,抱怨uninitialized value. 我可以通过云文件管理器验证Status在元数据中设置了一个值。我什至尝试过检查X-Object-Meta-Status(没有成功)。

相关代码如下:

# authentication
# set $container to pre-made container
my @files = $container->objects(prefix => 'tainted/')->all;
FILE: foreach my $file(@files) {

  # throws undefined // have tried capitalized and not, quotes and none
  next FILE if $file->object_metadata->{'status'} != '-1';

  # download file from object & do stuff with it

  # does not update object in cloud (not sure if anything id done locally)
  $file->object_metadata({ status => $status });

}

就像我说的,对象被成功检索,我只是无法查看给定文件的元数据。我已经玩过上面的一些变体,但是对新方法的每次测试都会花费带宽(钱!)。任何帮助将不胜感激!

4

1 回答 1

1

我感觉根本没有设置元数据。让我们看一下使用 Moose 构建的WebService::Rackspace::CloudFiles::Object

has 'object_metadata' => (
    is => 'rw',
    isa => 'HashRef',
    required => 0,
    default => sub {
        return {};
    }
);

所以有一个可选属性object_metadata,可以使用内置选择器检索。伟大的!

返回的对象是$container->objectsWebService::Rackspace::CloudFiles::Container中创建的,如下所示(截图):

foreach my $bit (@bits) {
  push @objects,
    WebService::Rackspace::CloudFiles::Object->new(
    cloudfiles => $self->cloudfiles,
    container => $self,
    name => $bit->{name},
    etag => $bit->{hash},
    size => $bit->{bytes},
    content_type => $bit->{content_type},
    last_modified => $bit->{last_modified},
  );
}

所以如果我没看错的话,这个调用中没有object_metadata属性,这很好,因为它是可选的。但是如果它没有设置,那么你检索一个空的 hashref 是有意义的,不是吗?

我会说你可能想自己修补它。:-/


我做了更多的挖掘:在CloudFiles 文档中,它说元数据在结果的 HTTP 标头中返回。关于如何自行检索元数据的文档很好地解释了它是如何传输的。但不幸的是,模块中肯定没有解析。

于 2012-11-01T20:03:43.833 回答