【发布时间】:2014-01-19 21:26:03
【问题描述】:
我希望将 RackSpace 的 CloudFiles 平台用于大型对象存储(word 文档、图像等)。按照他们的一些指南,我发现了一个有用的代码 sn-p,它看起来应该可以工作,但在我的情况下却不行。
Iterable<Module> modules = ImmutableSet.<Module> of(
new Log4JLoggingModule());
Properties properties = new Properties();
properties.setProperty(LocationConstants.PROPERTY_ZONE, ZONE);
properties.setProperty(LocationConstants.PROPERTY_REGION, "ORD");
CloudFilesClient cloudFilesClient = ContextBuilder.newBuilder(PROVIDER)
.credentials(username, apiKey)
.overrides(properties)
.modules(modules)
.buildApi(CloudFilesClient.class);
问题在于,当此代码执行时,它会尝试将我登录到 CloudFiles 的 IAD(弗吉尼亚)实例。我的组织的目标是使用 ORD (Chicago) 实例作为主要与我们的云共置并使用 DFW 作为备份环境。登录响应导致 IAD 实例首先返回,所以我假设 JClouds 正在使用它。浏览一下,CloudFiles 似乎忽略了 ZONE/REGION 属性。我想知道是否有任何方法可以覆盖返回以进行身份验证的代码,以遍历返回的提供程序并选择要登录的提供程序。
更新:
接受的答案大多是好的,在这个 sn-p 中提供了更多信息:
RestContext<CommonSwiftClient, CommonSwiftAsyncClient> swift = cloudFilesClient.unwrap();
CommonSwiftClient client = swift.getApi();
SwiftObject object = client.newSwiftObject();
object.getInfo().setName(FILENAME + SUFFIX);
object.setPayload("This is my payload."); //input stream.
String id = client.putObject(CONTAINER, object);
System.out.println(id);
SwiftObject obj2 = client.getObject(CONTAINER,FILENAME + SUFFIX);
System.out.println(obj2.getPayload());
【问题讨论】: