You must segment objects that are larger than 5 GB before you can upload them. You then upload the segment objects like you would any other object and create a dynamic large manifest object. The manifest object tells Object Storage how to find the segment objects that comprise the large object. The segments remain individually addressable, but retrieving the manifest object streams all the segments concatenated. There is no limit to the number of segments that can be a part of a single large object.
To ensure the download works correctly, you must upload
all the object segments to the same container and ensure
that each object name is prefixed in such a way that it
sorts in the order in which it should be concatenated. You
also create and upload a manifest file. The manifest file
is a zero-byte file with the extra
X-Object-Manifest
{container}/{prefix}
header, where
{container}
is the container the object
segments are in and {prefix}
is the common
prefix for all the segments. You must UTF-8-encode and
then URL-encode the container and common prefix in the
X-Object-Manifest
header.
It is best to upload all the segments first and then create or update the manifest. With this method, the full object is not available for downloading until the upload is complete. Also, you can upload a new set of segments to a second location and update the manifest to point to this new location. During the upload of the new segments, the original manifest is still available to download the first set of segments.
Example 1.4. Upload segment of large object request: HTTP
PUT /{api_version}/{account}/{container}/{object} HTTP/1.1 Host: storage.clouddrive.com X-Auth-Token: eaaafd18-0fed-4b3a-81b4-663c99ec1cbb ETag: 8a964ee2a5e88be344f36c22562a6486 Content-Length: 1 X-Object-Meta-PIN: 1234
No response body is returned. A status code of
2nn
(between 200 and 299, inclusive) indicates a successful
write; status 411
Length Required denotes a missing
Content-Length
or
Content-Type
header in the request.
If the MD5 checksum of the data written to the storage
system does NOT match the (optionally) supplied ETag
value, a 422
Unprocessable Entity response is
returned.
You can continue uploading segments like this example shows, prior to uploading the manifest.
Example 1.5. Upload next segment of large object request: HTTP
PUT /{api_version}/{account}/{container}/{object} HTTP/1.1 Host: storage.clouddrive.com X-Auth-Token: eaaafd18-0fed-4b3a-81b4-663c99ec1cbb ETag: 8a964ee2a5e88be344f36c22562a6486 Content-Length: 1 X-Object-Meta-PIN: 1234
Next, upload the manifest you created that indicates the container the object segments reside within. Note that uploading additional segments after the manifest is created causes the concatenated object to be that much larger but you do not need to recreate the manifest file for subsequent additional segments.
Example 1.6. Upload manifest request: HTTP
PUT /{api_version}/{account}/{container}/{object} HTTP/1.1 Host: storage.clouddrive.com X-Auth-Token: eaaafd18-0fed-4b3a-81b4-663c99ec1cbb Content-Length: 0 X-Object-Meta-PIN: 1234 X-Object-Manifest: {container}/{prefix}
The Content-Type
in the response for
a GET or HEAD on the manifest is the same as the
Content-Type
set during the PUT
request that created the manifest. You can easily change
the Content-Type
by reissuing the PUT
request.