On 15.07.2014 14:04, SANDEEP BAZAR wrote:
> I am trying to store and retrieve binary objects from swift using
> org.jclouds.openstack.swift.v1 API.
>
> SwiftApi swiftApi;
> ObjectApi objectApi;
> SwiftObject object;
> swiftApi = ContextBuilder.newBuilder(provider)
>                 .endpoint("http://X.X.X.X:5000/v2.0/";)
>                 .credentials(identity, credential)
>                 .modules(modules)
>                 .buildApi(SwiftApi.class);
>
> objectApi = swiftApi.getObjectApiForRegionAndContainer(REGION, objectPath);
> object = objectApi.get(objectName);
> System.out.println("object: "+object);
>
> *Output:*
> object: SwiftObject{name=ssl.txt, uri=
> http://X.X.X.X:8080/v1/AUTH_c9b9a23a5e8e4a45921898a5ac306f29/Personal_Info/ssl.txt,
> etag=d76cad4bfabde5a5fc16a31a3ce82847, lastModified=Tue Jul 15 15:42:33 IST
> 2014, metadata={key1=value1, key3=value3, key2=value2}}
>
> When I dump the stream as string I see headers and mime parts arriving but
> I don't understand how to access the data
>
> Is there any way to get the content of the object and write to the local
> file.
Hey,

when using blob storage APIs (OpenStack Swift, Amazon S3, etc.) you
usually work on the meta data.

So your example enables you to use the API itself.
If you want to access the object you need to address the object
(ObjectAPI) and then use the object's payload.

Have a look at [1] to get started.

It would be something like this:

ObjectApi objectApi =
swiftApi.getObjectApiForRegionAndContainer("MyRegion", "MyContainerName");
SwiftObject object = objectApi.get("file.txt"); // the object name
Payload payload = object.getPayload();

With that payload you can then download the object.
Either with java build in mechanisms or using a 3rd party library such
as Google Guava.

See [2] for Payload details.

Kind regards
Markus¹


[1] https://jclouds.apache.org/guides/openstack/#swift
[2]
http://jclouds.apache.org/reference/javadoc/1.7.x/org/jclouds/io/Payload.html

Reply via email to