3

Rackspace Cloud API [ Github ]の非公式のPerl バインディングを使用して、特定のオブジェクトのメタデータを設定したり取得したりすることはできません。

クラウドからファイルを正常object_metadataに取得できますが、ドキュメントで定義されているように呼び出すと、uninitialized value. Statusメタデータに値が設定されていることを Cloud Files Manager で確認できます。私もチェックしようとしました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そのため、組み込みのセレクターを使用して取得できるオプションのプロパティがあります。素晴らしい!

によって返されるオブジェクトは、次のようにWebService :: Rackspace :: CloudFiles :: Container$container->objectsに作成されます(snipped):

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、この呼び出しにはプロパティがありません。これはオプションであるため、問題ありません。しかし、設定されていない場合は、空のハッシュ参照を取得するのが理にかなっていますね。

自分でパッチを当てたいと思うかもしれません。:-/


もう少し掘り下げました。CloudFilesのドキュメントでは、メタデータが結果のHTTPヘッダーで返されると書かれています。メタデータを独自に取得する方法に関するドキュメントには、メタデータがどのように送信されるかについての適切な説明がありますしかし、残念ながら、モジュールではそのための解析は確実に行われていません。

于 2012-11-01T20:03:43.833 に答える