我正在尝试更新我们在1.5到1.7版本中使用的jclouds库。
我们通过以下方式访问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();
自1.6以来不推荐使用RestContext。 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项目中的示例似乎使用了弃用的方法(上面提到的Links)。
任何想法如何解决这个问题?任何替代方案?
答案 0 :(得分: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
,你是对的,但你应该能够通过替换他们调用rackspaceApi
的{{1}}对象来转换为新的样式。 }}