Middleware that provides the ability to upload objects to a cluster using an HTML form POST. The format of the form is:
<![CDATA[ <form action="<swift-url>" method="POST" enctype="multipart/form-data"> <input type="hidden" name="redirect" value="<redirect-url>" /> <input type="hidden" name="max_file_size" value="<bytes>" /> <input type="hidden" name="max_file_count" value="<count>" /> <input type="hidden" name="expires" value="<unix-timestamp>" /> <input type="hidden" name="signature" value="<hmac>" /> <input type="file" name="file1" /><br /> <input type="submit" /> </form>]]>
The swift-url
is the URL to the Object Storage destination, such
as: https://swift-cluster.example.com/v1/AUTH_account/container/object_prefix
The name of each file uploaded is appended to the specified
swift-url
. So, you can upload directly to the root of container with
a URL like: https://swift-cluster.example.com/v1/AUTH_account/container/
Optionally, you can include an object prefix to better separate different users'
uploads, such as:
https://swift-cluster.example.com/v1/AUTH_account/container/object_prefix
Note | |
---|---|
The form method must be POST and the enctype must be
set as |
The redirect attribute is the URL to redirect the
browser to after the upload completes. The URL has status
and message query parameters added to it, indicating the
HTTP status code for the upload (2xx is success) and a
possible message for further information if there was an
error (such as "max_file_size
exceeded"
).
The max_file_size
attribute must be
included and indicates the largest single file upload that
can be done, in bytes.
The max_file_count
attribute must be
included and indicates the maximum number of files that
can be uploaded with the form. Include additional
<![CDATA[<input type="file"
name="filexx"/>]]>
attributes if
desired.
The expires attribute is the Unix timestamp before which the form must be submitted before it is invalidated.
The signature attribute is the HMAC-SHA1 signature of the form. This sample Python code shows how to compute the signature:
import hmac from hashlib import sha1 from time import time path = '/v1/account/container/object_prefix' redirect = 'https://myserver.com/some-page' max_file_size = 104857600 max_file_count = 10 expires = int(time() + 600) key = 'mykey' hmac_body = '%s\n%s\n%s\n%s\n%s' % (path, redirect, max_file_size, max_file_count, expires) signature = hmac.new(key, hmac_body, sha1).hexdigest()
The key is the value of the
X-Account-Meta-Temp-URL-Key
header
on the account.
Be certain to use the full path, from the
/v1/
onward.
The command-line tool swift-form-signature may be used (mostly just when testing) to compute expires and signature.
The file attributes must appear after the other attributes to be processed correctly. If attributes come after the file, they are not sent with the sub-request because on the server side, all attributes in the file cannot be parsed unless the whole file is read into memory and the server does not have enough memory to service these requests. So, attributes that follow the file are ignored.
Configuration option = Default value | Description |
---|---|
use = egg:swift#formpost |
Entry point of paste.deploy in the server |