2

使用している jclouds ライブラリをバージョン 1.5 から 1.7 に更新しようとしています。

次の方法で API にアクセスします: https://github.com/jclouds/jclouds-examples/tree/master/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles

private RestContext<CommonSwiftClient, CommonSwiftAsyncClient> swift;
BlobStoreContext context = ContextBuilder.newBuilder(PROVIDER)
.credentials(username, apiKey)
.buildView(BlobStoreContext.class);

swift = context.unwrap();

RestContext は 1.6 以降非推奨です。 http://demobox.github.io/jclouds-maven-site-1.6.0/1.6.0/jclouds-multi/apidocs/org/jclouds/rest/RestContext.html

私はそれをこのように機能させようとしました:

ContextBuilder contextBuilder = ContextBuilder.newBuilder(rackspaceProvider)
.credentials(rackspaceUsername, rackspaceApiKey);
rackspaceApi = contextBuilder.buildApi(CloudFilesClient.class);

実行時にファイルをアップロードすると、次のエラーが発生します。

org.jclouds.blobstore.ContainerNotFoundException

jclouds github プロジェクトの例では、非推奨のアプローチを使用しているようです (上記のリンク)。

これを解決する方法はありますか?代替案はありますか?

4

1 に答える 1

2

アップロード先のコンテナは存在しますか? このputObjectメソッドは、名前を付けたコンテナーが存在しない場合、それを自動的に作成しません。createContainer最初に明示的に呼び出して作成する必要があります。

コンテナを作成してファイルをアップロードする例を次に示します。

CloudFilesClient client = ContextBuilder.newBuilder("cloudfiles-us")
    .credentials(USERNAME, APIKEY)
    .buildApi(CloudFilesClient.class);

client.createContainer("sample");

SwiftObject object = client.newSwiftObject();
object.getInfo().setName("somefile.txt");
object.setPayload("file or bytearray or something else here");
client.putObject("sample", object);

// ...

client.close();

の例がjclouds-examplesまだ参照されていることは正しいですが、 を呼び出す場所でオブジェクトRestClientを置き換えることにより、新しいスタイルに変換できるはずです。rackspaceApiswift.getApi()

于 2014-02-10T19:42:32.610 に答える