Upload Examples

Topics

File Upload

This example shows the complete process for constructing a policy and form to upload a file attachment.

Policy and Form Construction

Following is a policy that supports uploads to Amazon S3 for the johnsmith bucket.


{ "expiration": "2007-12-01T12:00:00.000Z",

  "conditions": [

    {"bucket": "johnsmith"},

    ["starts-with", "$key", "user/eric/"],

    {"acl": "public-read"},

    {"success_action_redirect": "http://johnsmith.s3.amazonaws.com/successful_upload.html"},

    ["starts-with", "$Content-Type", "image/"],

    {"x-amz-meta-uuid": "14365123651274"},

    ["starts-with", "$x-amz-meta-tag", ""]

  ]

}

This policy requires the following:

  • The upload must occur before 12:00 GMT on 2007-12-01

  • The content must be uploaded to the johnsmith bucket

  • The key must start with "user/eric/"

  • The ACL is set to public-read

  • The success_action_redirect is set to http://johnsmith.s3.amazonaws.com/successful_upload.html

  • The object is an image file

  • The x-amz-meta-uuid tag must be set to 14365123651274

  • The x-amz-meta-tag can contain any value

Following is a Base64 encoded version of this policy.


eyAiZXhwaXJhdGlvbiI6ICIyMDA3LTEyLTAxVDEyOjAwOjAwLjAwMFoiLAogICJjb25kaXRpb25zIjogWwogICAgeyJidWNrZXQiOiAiam9obnNtaXRoIn0sCiAgICBbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAidXNlci9lcmljLyJdLAogICAgeyJhY2wiOiAicHVibGljLXJlYWQifSwKICAgIHsic3VjY2Vzc19hY3Rpb25fcmVkaXJlY3QiOiAiaHR0cDovL2pvaG5zbWl0aC5zMy5hbWF6b25hd3MuY29tL3N1Y2Nlc3NmdWxfdXBsb2FkLmh0bWwifSwKICAgIFsic3RhcnRzLXdpdGgiLCAiJENvbnRlbnQtVHlwZSIsICJpbWFnZS8iXSwKICAgIHsieC1hbXotbWV0YS11dWlkIjogIjE0MzY1MTIzNjUxMjc0In0sCiAgICBbInN0YXJ0cy13aXRoIiwgIiR4LWFtei1tZXRhLXRhZyIsICIiXQogIF0KfQo=

The secret key ID is uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o, so 0RavWzkygo6QX9caELEqKi9kDbU= is the signature for the preceding Policy document.

Following is a form that supports a POST to the johnsmith.net bucket using this policy.


<html>

  <head>

    ...

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

    ...

  </head>

  <body>

  ...

  <form action="http://johnsmith.s3.amazonaws.com/" method="post" enctype="multipart/form-data">

    Key to upload: <input type="input" name="key" value="user/eric/" /><br />

    <input type="hidden" name="acl" value="public-read" />

    <input type="hidden" name="success_action_redirect" value="http://johnsmith.s3.amazonaws.com/successful_upload.html" />

    Content-Type: <input type="input" name="Content-Type" value="image/jpeg" /><br />

    <input type="hidden" name="x-amz-meta-uuid" value="14365123651274" />

    Tags for File: <input type="input" name="x-amz-meta-tag" value="" /><br />

    <input type="hidden" name="AWSAccessKeyId" value="15B4D3461F177624206A" />

    <input type="hidden" name="Policy" value="POLICY" />

    <input type="hidden" name="Signature" value="SIGNATURE" />

    File: <input type="file" name="file" /> <br />

    <!-- The elements after this will be ignored -->

    <input type="submit" name="submit" value="Upload to Amazon S3" />

  </form>

  ...

</html>

Sample Request

This request assumes that the image uploaded is 117,108 bytes; the image data is not included.

POST / HTTP/1.1

Host: johnsmith.s3.amazonaws.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.10) Gecko/20071115 Firefox/2.0.0.10

Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5

Accept-Language: en-us,en;q=0.5

Accept-Encoding: gzip,deflate

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7

Keep-Alive: 300

Connection: keep-alive

Content-Type: multipart/form-data; boundary=9431149156168

Content-Length: 2661134



--9431149156168

Content-Disposition: form-data; name="key"



user/eric/MyPicture.jpg

--9431149156168

Content-Disposition: form-data; name="acl"



public-read

--9431149156168

Content-Disposition: form-data; name="success_action_redirect"



http://johnsmith.s3.amazonaws.com/successful_upload.html

--9431149156168

Content-Disposition: form-data; name="Content-Type"



image/jpeg

--9431149156168

Content-Disposition: form-data; name="x-amz-meta-uuid"



14365123651274

--9431149156168

Content-Disposition: form-data; name="x-amz-meta-tag"



Some,Tag,For,Picture

--9431149156168

Content-Disposition: form-data; name="AWSAccessKeyId"



15B4D3461F177624206A

--9431149156168

Content-Disposition: form-data; name="Policy"



eyAiZXhwaXJhdGlvbiI6ICIyMDA3LTEyLTAxVDEyOjAwOjAwLjAwMFoiLAogICJjb25kaXRpb25zIjogWwogICAgeyJidWNrZXQiOiAiam9obnNtaXRoIn0sCiAgICBbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAidXNlci9lcmljLyJdLAogICAgeyJhY2wiOiAicHVibGljLXJlYWQifSwKICAgIHsic3VjY2Vzc19hY3Rpb25fcmVkaXJlY3QiOiAiaHR0cDovL2pvaG5zbWl0aC5zMy5hbWF6b25hd3MuY29tL3N1Y2Nlc3NmdWxfdXBsb2FkLmh0bWwifSwKICAgIFsic3RhcnRzLXdpdGgiLCAiJENvbnRlbnQtVHlwZSIsICJpbWFnZS8iXSwKICAgIHsieC1hbXotbWV0YS11dWlkIjogIjE0MzY1MTIzNjUxMjc0In0sCiAgICBbInN0YXJ0cy13aXRoIiwgIiR4LWFtei1tZXRhLXRhZyIsICIiXQogIF0KfQo=

--9431149156168

Content-Disposition: form-data; name="Signature"



0RavWzkygo6QX9caELEqKi9kDbU=

--9431149156168

Content-Disposition: form-data; name="file"; filename="MyFilename.jpg"

Content-Type: image/jpeg



...file content...

--9431149156168

Content-Disposition: form-data; name="submit"



Upload to Amazon S3

--9431149156168--

Sample Response

HTTP/1.1 303 Redirect

x-amz-request-id: 1AEE782442F35865

x-amz-id-2: cxzFLJRatFHy+NGtaDFRR8YvI9BHmgLxjvJzNiGGICARZ/mVXHj7T+qQKhdpzHFh

Content-Type: application/xml

Date: Wed, 14 Nov 2007 21:21:33 GMT

Connection: close

Location: http://johnsmith.s3.amazonaws.com/successful_upload.html?bucket=johnsmith&key=user/eric/MyPicture.jpg&etag=&quot;39d459dfbc0faabbb5e179358dfb94c3&quot;

Server: AmazonS3

Text Area Upload

This example shows the complete process for constructing a policy and form to upload a text area. This is useful for submitting user-created content such as blog postings.

Policy and Form Construction

Following is a policy that supports text area uploads to Amazon S3 for the johnsmith bucket.

{ "expiration": "2007-12-01T12:00:00.000Z",

  "conditions": [

    {"bucket": "johnsmith"},

    ["starts-with", "$key", "user/eric/"],

    {"acl": "public-read"},

    {"success_action_redirect": "http://johnsmith.s3.amazonaws.com/new_post.html"},

    ["eq", "$Content-Type", "text/html"],

    {"x-amz-meta-uuid": "14365123651274"},

    ["starts-with", "$x-amz-meta-tag", ""]

  ]

}

This policy requires the following:

  • The upload must occur before 12:00 GMT on 2007-12-01

  • The content must be uploaded to the johnsmith bucket

  • The key must start with "user/eric/"

  • The ACL is set to public-read

  • The success_action_redirect is set to http://johnsmith.s3.amazonaws.com/new_post.html

  • The object is HTML text

  • The x-amz-meta-uuid tag must be set to 14365123651274

  • The x-amz-meta-tag can contain any value

Following is a Base64 encoded version of this policy.

eyAiZXhwaXJhdGlvbiI6ICIyMDA3LTEyLTAxVDEyOjAwOjAwLjAwMFoiLAogICJjb25kaXR

pb25zIjogWwogICAgeyJidWNrZXQiOiAiam9obnNtaXRoIn0sCiAgICBbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAidXNlci9lcmljLyJd

LAogICAgeyJhY2wiOiAicHVibGljLXJlYWQifSwKICAgIHsic3VjY2Vzc19hY3Rpb25fcmVkaXJlY3QiOiAiaHR0cDovL2pvaG5zbWl0a

C5zMy5hbWF6b25hd3MuY29tL25ld19wb3N0Lmh0bWwifSwKICAgIFsiZXEiLCAiJENvbnRlbnQtVHlwZSIsICJ0ZXh0L2h0bWwiXSwKI

CAgIHsieC1hbXotbWV0YS11dWlkIjogIjE0MzY1MTIzNjUxMjc0In0sCiAgICBbInN0YXJ0cy13aXRoIiwgIiR4LWFtei1tZXRhLXRhZy

IsICIiXQogIF0KfQo=

The secret key ID is uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o, so qA7FWXKq6VvU68lI9KdveT1cWgE= is the signature for the preceding Policy document.

Following is a form that supports a POST to the johnsmith.net bucket using this policy.


<html>

  <head>

    ...

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

    ...

  </head>

  <body>

  ...

  <form action="http://johnsmith.s3.amazonaws.com/" method="post" enctype="multipart/form-data">

    Key to upload: <input type="input" name="key" value="user/eric/" /><br />

    <input type="hidden" name="acl" value="public-read" />

    <input type="hidden" name="success_action_redirect" value="http://johnsmith.s3.amazonaws.com/new_post.html" />

    <input type="hidden" name="Content-Type" value="text/html" />

    <input type="hidden" name="x-amz-meta-uuid" value="14365123651274" />

    Tags for File: <input type="input" name="x-amz-meta-tag" value="" /><br />

    <input type="hidden" name="AWSAccessKeyId" value="15B4D3461F177624206A" />

    <input type="hidden" name="Policy" value="POLICY" />

    <input type="hidden" name="Signature" value="SIGNATURE" />

    Entry: <textarea name="file" cols="60" rows="10">

Your blog post goes here.

    </textarea><br />

    <!-- The elements after this will be ignored -->

    <input type="submit" name="submit" value="Upload to Amazon S3" />

  </form>

  ...

</html>



Sample Request

This request assumes that the image uploaded is 117,108 bytes; the image data is not included.

POST / HTTP/1.1

Host: johnsmith.s3.amazonaws.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.10) Gecko/20071115 Firefox/2.0.0.10

Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5

Accept-Language: en-us,en;q=0.5

Accept-Encoding: gzip,deflate

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7

Keep-Alive: 300

Connection: keep-alive

Content-Type: multipart/form-data; boundary=178521717625888

Content-Length: 5299


--178521717625888

Content-Disposition: form-data; name="key"



user/eric/NewEntry.html

--178521717625888

Content-Disposition: form-data; name="acl"



public-read

--178521717625888

Content-Disposition: form-data; name="success_action_redirect"



http://johnsmith.s3.amazonaws.com/new_post.html

--178521717625888

Content-Disposition: form-data; name="Content-Type"



text/html

--178521717625888

Content-Disposition: form-data; name="x-amz-meta-uuid"



14365123651274

--178521717625888

Content-Disposition: form-data; name="x-amz-meta-tag"



Interesting Post

--178521717625888

Content-Disposition: form-data; name="AWSAccessKeyId"



15B4D3461F177624206A

--178521717625888

Content-Disposition: form-data; name="Policy"

eyAiZXhwaXJhdGlvbiI6ICIyMDA3LTEyLTAxVDEyOjAwOjAwLjAwMFoiLAogICJjb25kaXRpb25zIjogWwogICAgeyJidWNrZXQiOiAiam9obnNtaXRoIn0sCiAgICBbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAidXNlci9lcmljLyJdLAogICAgeyJhY2wiOiAicHVibGljLXJlYWQifSwKICAgIHsic3VjY2Vzc19hY3Rpb25fcmVkaXJlY3QiOiAiaHR0cDovL2pvaG5zbWl0aC5zMy5hbWF6b25hd3MuY29tL25ld19wb3N0Lmh0bWwifSwKICAgIFsiZXEiLCAiJENvbnRlbnQtVHlwZSIsICJ0ZXh0L2h0bWwiXSwKICAgIHsieC1hbXotbWV0YS11dWlkIjogIjE0MzY1MTIzNjUxMjc0In0sCiAgICBbInN0YXJ0cy13aXRoIiwgIiR4LWFtei1tZXRhLXRhZyIsICIiXQogIF0KfQo=



--178521717625888

Content-Disposition: form-data; name="Signature"



qA7FWXKq6VvU68lI9KdveT1cWgE=

--178521717625888

Content-Disposition: form-data; name="file"



...content goes here...

--178521717625888

Content-Disposition: form-data; name="submit"



Upload to Amazon S3

--178521717625888--

Sample Response

HTTP/1.1 303 Redirect

x-amz-request-id: 1AEE782442F35865

x-amz-id-2: cxzFLJRatFHy+NGtaDFRR8YvI9BHmgLxjvJzNiGGICARZ/mVXHj7T+qQKhdpzHFh

Content-Type: application/xml

Date: Wed, 14 Nov 2007 21:21:33 GMT

Connection: close

Location: http://johnsmith.s3.amazonaws.com/new_post.html?bucket=johnsmith&key=user/eric/NewEntry.html&etag=40c3271af26b7f1672e41b8a274d28d4

Server: AmazonS3