Upload Part
Description
This operation uploads a part in a multipart upload.
Note
In this operation, you provide part data in your request. However, you have an option to specify your existing Amazon S3 object as a data source for the part you are uploading. To upload a part from an existing object, you use the Upload Part (Copy) operation. For more information, see Upload Part - Copy.
You must initiate a multipart upload (see Initiate Multipart Upload) before you can upload any part. In response to your initiate request, Amazon S3 returns an upload ID, a unique identifier, that you must include in your upload part request.
Part numbers can be any number from 1 to 10,000, inclusive. A part number uniquely identifies a part and also defines its position within the object being created. If you upload a new part using the same part number that was used with a previous part, the previously uploaded part is overwritten. Each part must be at least 5 MB in size, except the last part. There is no size limit on the last part of your multipart upload.
To ensure that data is not corrupted when traversing the network, specify the
Content-MD5 header in the upload part request. Amazon S3 checks the part
data against the provided MD5 value. If they do not match, Amazon S3 returns an
error.
Note
After you initiate multipart upload and upload one or more parts, you must either complete or abort multipart upload in order to stop getting charged for storage of the uploaded parts. Only after you either complete or abort the multipart upload, Amazon S3 frees up the parts storage and stops charging you for it.
For more information on multipart uploads, go to Multipart Upload Overview in the Amazon Simple Storage Service Developer Guide .
For information on the permissions required to use the multipart upload API, go to Multipart Upload API and Permissions in the Amazon Simple Storage Service Developer Guide.
You can optionally request server-side encryption where Amazon S3 encrypts your data as it writes it to disks in its data centers and decrypts it for you when you access it. You have the option of providing your own encryption key, or you can use the AWS-managed encryption keys. If you choose to provide your own encryption key, the request headers you provide in the request must match the headers you used in the request to initiate the upload by using Initiate Multipart Upload. For more information, go to Using Server-Side Encryption in the Amazon Simple Storage Service Developer Guide.
Requests
Syntax
PUT /ObjectName?partNumber=PartNumber&uploadId=UploadIdHTTP/1.1 Host:BucketName.s3.amazonaws.com Date:dateContent-Length:SizeAuthorization:authorization string
Request Parameters
This operation does not use request parameters.
Request Headers
This implementation of the operation can use the following request headers in addition to the request headers common to all operations. Request headers are limited to 8 KB in size. For more information, see Common Request Headers.
| Name | Description | Required |
|---|---|---|
Content-Length
|
The size of the part, in bytes. For more information, go to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13. Type: Integer Default: None |
Yes |
Content-MD5
|
The base64-encoded 128-bit MD5 digest of the part data. This header can be used as a message integrity check to verify that the part data is the same data that was originally sent. Although it is optional, we recommend using the Content-MD5 mechanism as an end-to-end integrity check. For more information, see RFC 1864. Type: String Default: None |
No |
Expect
|
When your application uses 100-continue, it does not send the request body until it receives an acknowledgment. If the message is rejected based on the headers, the body of the message is not sent. For more information, go to RFC 2616. Type: String Default: None Valid Values: 100-continue |
No |
Server-Side Encryption Specific Request Headers
Server-side encryption is supported by the S3 Multipart Upload actions. Unless you are using a customer-provided encryption key, you don't need to specify the encryption parameters in each UploadPart request. Instead, you only need to specify the server side encryption parameters in the initial Initiate Multipart request. For more information, see Initiate Multipart Upload.
If you requested server-side encryption using a customer-provided encryption key in your initiate multipart upload request, you must provide identical encryption information in each part upload using the following headers.
| Name | Description | Required |
|---|---|---|
x-amz-server-side-encryption-customer-algorithm
|
Specifies the algorithm to use to when encrypting the object. Type: String Default: None Valid Value: Constraints: Must be accompanied by valid
|
Yes |
x-amz-server-side-encryption-customer-key
|
Specifies the customer-provided base64-encoded
encryption key for Amazon S3 to use in encrypting data. This
value is used to store the object and then is discarded;
Amazon does not store the encryption key. The key must be
appropriate for use with the algorithm specified in the
Type: String Default: None Constraints: Must be accompanied by valid
|
Yes |
x-amz-server-side-encryption-customer-key-MD5
|
Specifies the base64-encoded 128-bit MD5 digest of the encryption key according to RFC 1321. Amazon S3 uses this header for a message integrity check to ensure the encryption key was transmitted without error. Type: String Default: None Constraints: Must be accompanied by valid
|
Yes |
Request Elements
This operation does not use request elements.
Responses
Response Headers
This implementation of the operation can include the following response headers in addition to the response headers common to all responses. For more information, see Common Response Headers.
| Name | Description |
|---|---|
x-amz-server-side-encryption
|
If you specified server-side encryption either with an AWS KMS or Amazon S3-managed encryption key in your initiate multipart upload request, the response includes this header. It confirms the encryption algorithm that Amazon S3 used to encrypt the object. Type: String |
x-amz-server-side-encryption-aws-kms-key-id
|
If the Type: String |
x-amz-server-side-encryption-customer-algorithm
|
If server-side encryption with customer-provided encryption keys(SSE-C) encryption was requested, the response will include this header confirming the encryption algorithm used. Type: String Valid Values: |
x-amz-server-side-encryption-customer-key-MD5
|
If SSE-C encryption was requested, the response includes this header to provide roundtrip message integrity verification of the customer-provided encryption key. Type: String |
x-amz-storage-class |
Provides storage class information of the object. Amazon S3 returns this header for
all objects except for For more information, go to Storage Classes in Amazon Simple Storage Service Developer Guide. Type: String Default: None |
Response Elements
This operation does not use response elements.
Special Errors
| Error Code | Description | HTTP Status Code | SOAP Fault Code Prefix |
|---|---|---|---|
NoSuchUpload |
The specified multipart upload does not exist. The upload ID might be invalid, or the multipart upload might have been aborted or completed. | 404 Not Found | Client |
For general information about Amazon S3 errors and a list of error codes, see Error Responses.
Examples
Sample Request
The following PUT request uploads a part (part number 1) in a multipart upload. The request includes the upload ID that you get in response to your Initiate Multipart Upload request.
PUT /my-movie.m2ts?partNumber=1&uploadId=VCVsb2FkIElEIGZvciBlbZZpbmcncyBteS1tb3ZpZS5tMnRzIHVwbG9hZR HTTP/1.1 Host: example-bucket.s3.amazonaws.com Date: Mon, 1 Nov 2010 20:34:56 GMT Content-Length: 10485760 Content-MD5: pUNXr/BjKK5G2UKvaRRrOA== Authorization:authorization string***part data omitted***
Sample Response
The response includes the ETag header. You need to retain this value for use when you send the Complete Multipart Upload request.
HTTP/1.1 200 OK x-amz-id-2: Vvag1LuByRx9e6j5Onimru9pO4ZVKnJ2Qz7/C1NPcfTWAtRPfTaOFg== x-amz-request-id: 656c76696e6727732072657175657374 Date: Mon, 1 Nov 2010 20:34:56 GMT ETag: "b54357faf0632cce46e942fa68356b38" Content-Length: 0 Connection: keep-alive Server: AmazonS3
Sample: Upload a part with an encryption key in the request for server-side encryption
If you initiated a multipart upload, see Sample: Initiate a Multipart Upload Using Server-side Encryption with Customer-provided Encryption Keys, with a request to save an object using server-side encryption with a customer-provided encryption key, each part upload must also include the same set of encryption-specific headers as shown in the following example request.
PUT /example-object?partNumber=1&uploadId=EXAMPLEJZ6e0YupT2h66iePQCc9IEbYbDUy4RTpMeoSMLPRp8Z5o1u8feSRonpvnWsKKG35tI2LB9VDPiCgTy.Gq2VxQLYjrue4Nq.NBdqI- HTTP/1.1 Host: example-bucket.s3.amazonaws.com Authorization:authorization stringDate: Wed, 28 May 2014 19:40:11 +0000 x-amz-server-side-encryption-customer-key: g0lCfA3Dv40jZz5SQJ1ZukLRFqtI5WorC/8SEEXAMPLE x-amz-server-side-encryption-customer-key-MD5: ZjQrne1X/iTcskbY2example x-amz-server-side-encryption-customer-algorithm: AES256
In the response, Amazon S3 returns encryption-specific headers providing the encryption algorithm used and MD5 digest of the encryption key you provided in the request.
HTTP/1.1 100 Continue HTTP/1.1 200 OK x-amz-id-2: Zn8bf8aEFQ+kBnGPBc/JaAf9SoWM68QDPS9+SyFwkIZOHUG2BiRLZi5oXw4cOCEt x-amz-request-id: 5A37448A37622243 Date: Wed, 28 May 2014 19:40:12 GMT ETag: "7e10e7d25dc4581d89b9285be5f384fd" x-amz-server-side-encryption-customer-algorithm: AES256 x-amz-server-side-encryption-customer-key-MD5: ZjQrne1X/iTcskbY2example


