You typically need ranged PUT requests for very large uploads, especially when network bandwidth or latency might cause the operation to time out.
If the response to an upload progress request indicates that the upload terminated before it was complete, you can use the size and bytesTransferred values from the response to construct a ranged PUT request of the remaining contents, as shown in Example: Ranged PUT Request to Complete a Partial Upload.
The following request completes the upload of the file disk0.vmdk shown in this fragment of a VAppTemplate.
<VAppTemplate ... > ... <Files> ... <File size="1950489088" bytesTransferred="500000000" name="disk0.vmdk"> ... </File> </Files> ... </VAppTemplate>
PUT https://vcloud.example.com/transfer/.../disk0.vmdk Content-Range: bytes 500000000-1950489087/1950489088 Content-Length: 1450489088 ...serialized contents of specified range... EOF
200 OK