使用非官方的Perl binding of the Rackspace Cloud API [Github],我一生都无法设置或检索给定对象的元数据。
我可以成功地从云中拉出文件,但是当我按文档中的定义调用object_metadata
时,出现错误,抱怨uninitialized value
。我可以通过Cloud Files管理器来验证是否为元数据中的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 });
}
就像我说的那样,对象已成功检索,我只是无法查看给定文件上的元数据。我已经对上面的内容进行了一些修改,但是每次对新方法的测试都会占用带宽(钱!)。任何帮助将不胜感激!
最佳答案
我感觉到根本没有设置元数据。让我们看一下使用Moose构建的WebService::Rackspace::CloudFiles::Object:
has 'object_metadata' => (
is => 'rw',
isa => 'HashRef',
required => 0,
default => sub {
return {};
}
);
因此,有一个可选属性
object_metadata
,可以使用内置选择器进行检索。大!$container->objects
返回的对象是在WebService::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 docs中,它表示元数据在结果的HTTP标头中返回。 docs on how to retrieve metadata本身很好地说明了如何传输。但是不幸的是,肯定没有在模块中进行任何解析。
关于perl - Rackspace Cloud API的Perl绑定(bind)以及设置/获取对象元数据的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13183867/