Initiating a multipart upload
You use the HTTP POST method with the uploads query parameter to initiate a multipart upload in a bucket.
To initiate a multipart upload, you must be an authenticated user. Additionally, you need write permission for the target bucket.
When you initiate a multipart upload, you specify a name for the object you're creating.
In initiate the multipart upload request, you can specify custom metadata to be added to the object when the multipart upload is completed. To do this, you use x-amz-meta- headers.
In the initiate multipart upload request, you can specify an ACL to be added to the object when the multipart upload is completed. To do this, you need to use ACL headers. You cannot use an ACL request body when initiating a multipart upload.
If the ACL you specify in a request to initiate a multipart upload is invalid, HCP returns a 400 (Bad Request) or 501 (Not Implemented) status code and does not initiate the multipart upload.
You cannot change the custom metadata or ACL for a multipart object until the multipart upload used to create the object has been completed.
When you complete a multipart upload, you become the owner of the resulting object.
Request line
Depending on whether the bucket name is included in the hostname in the S3 compatible request, a request to initiate a multipart upload has either of these formats:
- With the bucket name included in the hostname:
POST /object-name?uploads HTTP/1.1
- With the bucket name following the hostname:
POST /bucket-name/object-name?uploads HTTP/1.1
The uploads query parameter is case sensitive.
Required headers
The list below describes the headers you can use in a request to initiate a multipart upload.
Authorization
Specifies user credentials or requests anonymous access.
Date
Specifies the date and time when the request is being made according to the requester. Normally, this is the current date and time.
The date and time must always be specified using Greenwich Mean Time (GMT).
To specify the date and time, use this format:
DDD, dd MMM yyyy HH:mm:ss (+0000|GMT)
In this format:
DDD
The three-letter abbreviation for the day of the week, with an uppercase first letter (for example, Mon).
dd
The two-digit day of the month.
MMM
The three-letter abbreviation for the month, with an uppercase first letter (for example, Feb).
yyyy
The four-digit year.
HH
The hour on a 24-hour clock.
mm
The number of minutes.
ss
The number of seconds.
For example:
Thu, 23 Mar 2017 14:27:05 +0000
All S3 compatible requests must include either a
Date
header or anx-amz-date
header. If a request includes both headers, HCP uses the date and time in thex-amz-date
header.Host
Specifies the hostname for the request. The host name identifies either a tenant or a bucket.
For a tenant, use this format:
tenant-name.hcp-domain-name
For a bucket, use this format:
bucket-name.tenant-name.hcp-domain-name
x-amz-date
Specifies the date and time at which the request is being made according to the requester. Normally, this is the current date and time.
For the valid values for this header, see the description of the
Date
header above.
Optional headers
x-amz-acl
Adds a canned ACL to the bucket.
This header is used only to add a canned ACL to a bucket. If you’re using individual
x-amz-grant-
headers to add the ACL, thex-amz-acl
header is invalid.x-amz-grant-full-control
Grants full control over the bucket to one or more specified grantees.
If you’re using a canned ACL to add an ACL to a bucket, the
x-amz-grant-full-control
header is invalid.x-amz-grant-read
Grants the browse and read data access permissions for the bucket to one or more specified grantees.
If you’re using a canned ACL to add an ACL to a bucket, the
x-amz-grant-read
header is invalid.x-amz-grant-read-acp
Grants the read ACL data access permission for the bucket to one or more specified grantees.
If you’re using a canned ACL to add an ACL to a bucket, the
x-amz-grant-read-acp
header is invalid.x-amz-grant-write
Grants the write and delete data access permissions for the bucket to one or more specified grantees.
If you’re using a canned ACL to add an ACL to a bucket, the
x-amz-grant-write
header is invalid.x-amz-grant-write-acp
Grants the write ACL data access permission for the bucket to one or more specified grantees.
If you’re using a canned ACL to add an ACL to a bucket, the
x-amz-grant-write-acp
header is invalid.x-amz-meta-
Adds custom metadata to the resulting object when the multipart upload is completed.
x-hcp-pretty-print
Optionally, requests that the XML response body be formatted for readability. Valid values are:
true
Format the XML response body for readability.
false
Do not apply any special formatting to the XML response body.
The default is false.
The values
true
andfalse
are not case sensitive.
Response headers
The list below describes the headers returned in response to a successful request to initiate a multipart upload.
Content-Type
Specifies the Internet media type of the response body. For a request to initiate a multipart upload, the value of this header is always
application/xml;charset=UTF-8
.Date
The date and time when HCP responded to the request, in Greenwich Mean Time (GMT). The date and time are returned in this format:
DDD dd MMM yyyy HH:mm:ss GMT
For example:
Fri, 18 Sep 2020 14:27:05 GMT
Transfer-Encoding
Indicates that HCP could not determine the size of the response body before formulating the response. For a request to list the buckets you own, the value of this header is always
chunked
.x-amz-abort-date
Specifies the date and time when the multipart upload will be automatically aborted if it has not already been completed. The date and time are expressed in this format:
DDD, dd MMM yyyy hh:mm:ss GMT
For example:
Sat, 25 Mar 2017 17:19:26 GMT
x-amz-server-side-encryption
Specifies whether objects stored in HCP are encrypted. Possible values are:
- If objects are encrypted,
AES256
- If objects are not encrypted,
None
This header is returned only if the request headers include
x-amz-server-side-encryption
.- If objects are encrypted,
Response body
HCP returns information about the multipart upload that results from a successful initiate request in an XML response body.
The list below describes the XML elements in the response body returned in response to a request to initiate a multipart upload. The elements are listed in alphabetical order.
Bucket
Child of the
InitiateMultipartUploadResult
element.The
Bucket
element specifies the name of the bucket where the multipart upload was initiated.InitiateMultipartUploadResult
Root element.
Key
Child of the
InitiateMultipartUploadResult
element.The
Key
element specifies the name of the object for which the multipart upload was initiated.UploadId
Child of the
InitiateMultipartUploadResult
element.The
UploadId
element specifies the upload ID for the multipart upload initiated by the request.Use this ID in conjunction with the object name to identify the multipart upload in:
- Requests to upload parts for the multipart upload
- Requests to upload parts for the multipart upload by copying
- Requests to complete the multipart upload
- Requests to abort the multipart upload
- Requests to list the parts that have been uploaded for the multipart upload
- Responses to requests to list in-progress multipart uploads
Return codes
The table below describes HTTP status codes that can be returned in response to a request to initiate a multipart upload.
Code | Meaning | Description |
200 | OK | HCP successfully initiated the multipart upload. |
400 | Bad Request |
Possible reasons include:
|
403 | Forbidden |
Possible reasons include:
|
404 | Not Found | The specified bucket does not exist. |
500 | Internal Server Error |
An internal error occurred. If this error persists, contact your tenant administrator. |
501 | Not Implemented | The request includes the x-amz-acl header with an invalid value. |
503 | Service Unavailable |
HCP is temporarily unable to handle the request, probably due to system overload, maintenance, or upgrade. Try the request again, gradually increasing the delay between each successive attempt. If this error persists, contact your tenant administrator. |
Example: Initiating a multipart upload
Here’s a sample POST request that initiates a multipart upload for an object named acctg/RulesAndRegulations.pdf in the finance bucket.
Request with s3curl command line
./s3curl.pl --id=lgreen --post -- -k "https://finance.europe.hcp.example.com/acctg/RulesAndRegulations.pdf?uploads" -H "x-hcp-pretty-print: true"
Request headers
POST /acctg/RulesAndRegulations.pdf?uploads HTTP/1.1 Host: finance.europe.hcp.example.com Date: Fri, 07 February 2020 17:19:26 +0000 Authorization: AWS bGdyZWVu:u0eqPDwPw1SR7kdZn87dnGACzaM= x-hcp-pretty-print: true
Response headers
HTTP/1.1 200 OK Date: Fri, 07 February 2020 17:19:26 GMT x-amz-server-side-encryption: None x-amz-abort-date: Sat, 25 Mar 2017 17:19:26 GMT Content-Type: application/xml;charset=UTF-8 Transfer-Encoding: chunked
Response body
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <InitiateMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Bucket>finance</Bucket> <Key>acctg/RulesAndRegulations.pdf</Key> <UploadId>94837746087105</UploadId> </InitiateMultipartUploadResult>