A lightweight file upload input for Django and Amazon S3.
Django-S3File allows you to upload files directly AWS S3 effectively bypassing your application server. This allows you to avoid long running requests from large file uploads.
- lightweight: less 200 lines
- no JavaScript or Python dependencies (no jQuery)
- easy integration
- works just like the build-in
Make sure you have `Amazon S3 storage`_ setup correctly.
Just install S3file using pip
.
pip install django-s3file
Add the S3File app and middleware in your settings:
INSTALLED_APPS = (
'...',
's3file',
'...',
)
MIDDLEWARE = (
'...',
's3file.middleware.S3FileMiddleware',
'...',
)
S3File automatically replaces Django’s ClearableFileInput
widget,
you do not need to alter your code at all.
The ClearableFileInput
widget is only than automatically replaced
when the DEFAULT_FILE_STORAGE
setting is set to
django-storages
’ S3Boto3Storage
.
S3File uploads to a single folder. Files are later moved by Django when
they are saved to the upload_to
location.
It is recommended to setup expiration for that folder, to ensure that old and unused file uploads don’t add up and produce costs.
The default folder name is: tmp/s3file
You can change it by changing
the S3FILE_UPLOAD_PATH
setting.
You will need to allow POST
from all origins. Just add the following
to your CORS policy.
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Django does have limited support to uploaded multiple files. S3File
fully supports this feature. The custom middleware makes ensure that
files are accessible via request.FILES
, even thogh they have been
uploaded to AWS S3 directly and not to your Django application server.