如何在Apache JClouds中设置HTTP标头?

fengye87

我正在使用Apache JClouds连接到我的Openstack Swift安装。我设法从Swift上载和下载对象。但是,我看不到如何将动态大对象上传到Swift。

要上传动态大对象,我需要先上传所有片段,就像往常一样。然后,我需要上传一个清单对象以逻辑上将它们组合起来。问题是要告诉Swift这是一个清单对象,我需要设置一个特殊的标头,我不知道如何使用JClouds api来实现。

这是来自openstack官方网站的动态大对象示例

我正在使用的代码:

public static void main(String[] args) throws IOException {
    BlobStore blobStore = ContextBuilder.newBuilder("swift").endpoint("http://localhost:8080/auth/v1.0")
            .credentials("test:test", "test").buildView(BlobStoreContext.class).getBlobStore();
    blobStore.createContainerInLocation(null, "container");

    ByteSource segment1 = ByteSource.wrap("foo".getBytes(Charsets.UTF_8));
    Blob seg1Blob = blobStore.blobBuilder("/foo/bar/1").payload(segment1).contentLength(segment1.size()).build();
    System.out.println(blobStore.putBlob("container", seg1Blob));

    ByteSource segment2 = ByteSource.wrap("bar".getBytes(Charsets.UTF_8));
    Blob seg2Blob = blobStore.blobBuilder("/foo/bar/2").payload(segment2).contentLength(segment2.size()).build();
    System.out.println(blobStore.putBlob("container", seg2Blob));

    ByteSource manifest = ByteSource.wrap("".getBytes(Charsets.UTF_8));
    // TODO: set manifest header here
    Blob manifestBlob = blobStore.blobBuilder("/foo/bar").payload(manifest).contentLength(manifest.size()).build();
    System.out.println(blobStore.putBlob("container", manifestBlob));

    Blob dloBlob = blobStore.getBlob("container", "/foo/bar");
    InputStream input = dloBlob.getPayload().openStream();
    while (true) {
        int i = input.read();
        if (i < 0) {
            break;
        }
        System.out.print((char) i); // should print "foobar"
    }
}

“待办事项”部分是我的问题。


编辑:

我已经指出,Jclouds自动处理大文件上传,这在我们的案例中不是很有用。实际上,我们开始上传第一个片段时,我们不知道文件的大小或下一个片段何时到达。我们的api旨在使客户端能够按自己选择的大小和自己选择的时间按块大小上传文件,完成后,调用“提交”将这些块制作为文件。因此,这使我们希望在此处自行上传清单。

fengye87

根据@Everett Toews的回答,我的代码正确运行了:

public static void main(String[] args) throws IOException {
    CommonSwiftClient swift = ContextBuilder.newBuilder("swift").endpoint("http://localhost:8080/auth/v1.0")
            .credentials("test:test", "test").buildApi(CommonSwiftClient.class);

    SwiftObject segment1 = swift.newSwiftObject();
    segment1.getInfo().setName("foo/bar/1");
    segment1.setPayload("foo");
    swift.putObject("container", segment1);

    SwiftObject segment2 = swift.newSwiftObject();
    segment2.getInfo().setName("foo/bar/2");
    segment2.setPayload("bar");
    swift.putObject("container", segment2);

    swift.putObjectManifest("container", "foo/bar2");

    SwiftObject dlo = swift.getObject("container", "foo/bar", GetOptions.NONE);
    InputStream input = dlo.getPayload().openStream();
    while (true) {
        int i = input.read();
        if (i < 0) {
            break;
        }
        System.out.print((char) i);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 Guzzle 中设置 Authorization HTTP 标头?

如何在HTTP响应中设置标头?

如何在vue-cli中设置HTTP标头?

如何在magento中设置http标头

如何在Apache httpd中强制刷新HTTP标头?

如何在boost-beast http请求中设置http标头?

HTTP响应标头被覆盖。哪里可以在apache中设置所有HTTP响应标头?

如何使用 javaagent 设置 HTTP 标头

如何在每个HTTP api调用中设置不同类型的标头?

如何在azure逻辑应用程序http操作中设置标头或身份验证

如何在RESTEasy客户端框架中设置HTTP标头?

如何在Angular 2中正确设置Http请求标头

使用BridgeTalk HttpConnection对象时,如何在Adobe Illustrator ExtendScript中设置HTTP标头?

如何在node-http-proxy中设置Access-Control-Allow-Headers标头

如何在没有页面终止的情况下在 PHP 中设置标头 HTTP 代码?

如何在OctoberCMS中设置Cache-Control HTTP标头?

如何在Apache Jmeter中为组线程请求设置不同的标头?

如何在Apache Felix maven-bundle-plugin中设置Provide-Capability标头?

如何在AWS Load Balancer响应中禁用Apache HTTP标头信息?

如何在与apache_request_headers相同的rails中访问HTTP标头?

如何使用Apache从HTTP响应中删除Server:标头?

如何在Apache Benchmark中传递多个标头

如何读取在流程中创建的变量并将其设置为HTTP请求组件中的标头?

如何在golang中从http请求中读取标头?

如何在NestJS响应中设置标头字段?

如何在DRF的APIClient()delete()请求中设置标头?

如何在php的SoapClient中设置和禁用标头?

如何在SoapHttpClientProtocol中设置User-Agent标头?

如何在JSP中动态设置标头值