Atom feed of this document
 
 
 

 4.3.3. Copy Object

Suppose you upload a file with the wrong object name or content type, or you needed to move some objects to another container. Without a server-side copy feature, you would need to repeat uploading the same content and then delete the existing object. With server-side object copy, you can save the step of re-uploading the content and thus also save the associated bandwidth charges, if any were to apply.

There are two ways to copy an existing object to another object in Cloud Files. One way is to do a PUT to the new object (the target) location, but add the “X-Copy-From” header to designate the source of the data. The header value should be the container and object name of the source object in the form of “/container/object”. Also, the X-Copy-From PUT requests require a Content-Length header, even if it is zero (0).

  PUT /<api version>/<account>/<container>/<destobject> HTTP/1.1
  Host: <storage URL>
  X-Auth-Token: <some-auth-token>
  X-Copy-From: /<container>/<sourceobject>
  Content-Length: 0                    
              

The second way to do an object copy is similar. Do a COPY to the existing object, and include the “Destination” header to specify the target of the copy. The header value is the container and new object name in the form of “/container/object”. Unlike the first method, this method does not require a Content-Length header.

  COPY /<api version>/<account>/<container>/<sourceobject> HTTP/1.1
  Host: <storage URL>
  X-Auth-Token: <some-auth-token>
  Destination: /<container>/<destobject>
              

With both of these methods, the destination container must exist before attempting the copy.

If you wanted to move the object rather than copy it, you need to send a DELETE request to the old object. A move is simply a COPY + DELETE. All metadata is preserved during the object copy. Note that you can set metadata on the request to copy the object (either the PUT or the COPY) and the metadata will overwrite any conflicting keys on the target (new) object. One interesting use case is to copy an object to itself and set the content type to a new value. This is the only way to change the content type of an existing object.

Your account will not be charged when you copy or move your objects within the same Data Center using the internal network host name. The Data Center internet network is called ServiceNet. Your ServiceNet endpoint can be found when you authenticate your session; as in the example below, it is listed as InternalURL. However, a rule of thumb is that its name is your Cloud Files storage URL with "snet-" pre-pended to it. If you do not know which Data Center you are working in, you can find it in the Cloud Control Panel.

 

Example 4.48. Data Center Endpoints

  "endpoints": [
    {
      "region": "DFW",
      "internalURL": "https://snet-storage101.dfw1.clouddrive.com/v1/MossoCloudFS_9491081f-7e12-4f56-98d0-cdb3037c8d7c",
      "tenantId": "MossoCloudFS_9491081f-7e12-4f56-98d0-cdb3037c8d7c",
      "publicURL": "https://storage101.dfw1.clouddrive.com/v1/MossoCloudFS_9491081f-7e12-4f56-98d0-cdb3037c8d7c"
    },
    {
      "region": "ORD",
      "internalURL": "https://snet-storage101.ord1.clouddrive.com/v1/MossoCloudFS_9491081f-7e12-4f56-98d0-cdb3037c8d7c",
      "tenantId": "MossoCloudFS_9491081f-7e12-4f56-98d0-cdb3037c8d7c",
      "publicURL": "https://storage101.ord1.clouddrive.com/v1/MossoCloudFS_9491081f-7e12-4f56-98d0-cdb3037c8d7c"
    }
  ]
                    



loading table of contents...