- Added support for opening files in text mode on Python 3.11+ (@etianen).
- Added
client_method
tosave()
method, allowing the generation of presigned URLs for direct S3 upload (@Roriz).
- Added
AWS_S3_CONNECT_TIMEOUT
setting (@roriz).
- Added
AWS_S3_MAX_POOL_CONNECTIONS
setting (@Routhinator).
- Alternative fix for
ValueError
when usingManifestStaticS3Storage
(@etianen).
- Fixed
RemovedInDjango50Warning
warning from use ofdjango.utils.timezone.utc
(@kevinmarsh).
- Fixed
ValueError
when usingManifestStaticS3Storage
(@etianen).
- Adding AWS_S3_USE_THREADS to fix gevent issues (@uxio0).
- Add copy() and rename() methods (@emesik).
- Saving files now uses multipart streaming upload, supporting arbitrarily large files without buffering contents to memory (@bramverhelst).
- Fixed some deprecation warnings (@kevinmarsh).
- Documentation fixes (@riggedCoinflip, @dduong42).
- CI improvements (@michael-k, @etianen).
- Allowing both AWS_S3_BUCKET_AUTH and AWS_S3_PUBLIC_URL to be set (with a stern warning!) (@ipmb).
- Fixed error in exists() when using DigitalOcean's AMS3 (@heckad).
- Removed validation of AWS_SECRET_ACCESS_KEY, AWS_ACCESS_KEY_ID, and AWS_SESSION_TOKEN, because these can be detected by boto by using the AWS instance metadata service (@MichaelAnckaert).
- Added further settings validation to help newcomers to the library (@etianen).
- Django 3.0 support (@michael-k, @etianen).
- Removed S3Error, replaced with built-in OSError and subclasses (@etianen).
- Added support for custom URL parameters in calls to url() (@emesik).
- Calls to size() now report uncompressed size when AWS_S3_GZIP is enabled (@emesik).
- Allowing storage classes to be picked (@fdemmer).
- Documentation improvements, bugfixes and minor tweaks (@hramezani, @michael-k).
- Added support for AWS KMS encryption, using the
AWS_S3_ENCRYPT_KEY
andAWS_S3_KMS_ENCRYPTION_KEY_ID
settings (@MartinFalatic).
- Actually fixed issues using
S3Storage
in a multithreaded environment.
- Fixed issues using
S3Storage
in a multithreaded environment.
- Fixed 'header does not match what was computed' error (@etianen).
- Compatibility with riak-cs (@flo-dhalluin).
- Fixed documentation typos (@mgalgs).
- Changed default for AWS_S3_MAX_AGE_SECONDS_STATIC to 1 hour (see #62) (@etianen, @marfire).
- Added AWS_S3_MAX_AGE_SECONDS_CACHED_STATIC setting (@etianen, @marfire).
- Added
AWS_S3_SIGNATURE_VERSION
setting. - Changed the default signature version for S3 to v4. According to the AWS documentation all S3 regions support v4 (but not all support v2).
- Raising
S3Error
instead ofOSError
if S3 storage throws an error.S3Error
inherits from bothOSError
andIOError
. - Better checking for directory existance (@kencochrane, @etianen).
- Added ``AWS_S3_FILE_OVERWRITE `` setting (@Edke).
- Bugfix: Fixed
listdir()
at bucket root returning an empty list (@aaugustin). - Added
get_modified_time
support (@jschneier). - Testing against Django 1.11 (@matthiask).
- Raising
OSError
instead ofIOError
if S3 storage throws an error. On Python 3 it makes no difference, but on Python 2 it's what collectstatic expects. - Fixed issue with
s3_sync_meta
where a race condition or key name normalization could cause anOSError
to be raised. - Fixed modified_time() on non-UTC machines.
- Breaking: All S3 keys are normalized to use unix-style path separators, and resolve relative paths.
- Switched to boto3-based implementation.
- Added AWS_S3_CONTENT_DISPOSITION and AWS_S3_CONTENT_LANGUAGE settings.
- Added AWS_S3_CONTENT_DISPOSITION_STATIC and AWS_S3_CONTENT_LANGUAGE_STATIC settings.
- Breaking: Setting Content-Disposition and Content-Language headers via AWS_S3_METADATA setting no longer supported.
- Breaking: AWS_S3_HOST setting refactored to AWS_S3_ENDPOINT_URL.
- Breaking: AWS_S3_HOST_STATIC setting refactored to AWS_S3_ENDPOINT_URL_STATIC.
- Breaking: AWS_S3_CALLING_FORMAT setting refactored to AWS_S3_ADDRESSING_STYLE.
- Breaking: AWS_S3_CALLING_FORMAT_STATIC setting refactored to AWS_S3_ADDRESSING_STYLE_STATIC.
- Added support for server-side encryption (@aaugustin).
- Allowed S3 files to be re-opened once closed (@etianen).
- Bugfixes (@Moraga, @etianen).
- Fixing regression with accessing legacy S3 keys with non-normalized path names (@etianen).
- Added settings for disabling gzip compression (@leonsmith)
- Bug fix for relative upload paths (@leonsmith)
- Bug fix for detecting empty directories (@etianen).
- Automatic conversion of windows path separators on upload (@etianen).
- Added support for custom metadata associated with a file (@etianen).
- Added support for non-S3 hosts (@philippbosch, @heldinz).
- Added support for reduced redundancy storage class (@aaugustin).
- Minor bugfixes and documentation improvements (@leonsim, @alexkahn, @etianen).
- Added settings for customizing S3 public URLs (@etianen).
- Added settings for customizing S3 calling format (@etianen).
- Compressing javascript files on upload to S3 (@etianen).
- Using a temporary file buffer for compressing and encoding large file uploads (@etianen).
- Eplicitly closing temporary file buffers, rather than relying on the GC (@etianen).
- Fixed issue with s3_sync_meta management command not being included in source distribution (@etianen).
- Added settings for fine-grained control over browser caching (@etianen).
- Added settings for adding a prefix to all keys (@etianen).
- Added AWS_S3_MAX_AGE_SECONDS setting (@kasajei).
- Added option to connect S3 without AWS key/secret (@achiku).
- First production release (@etianen).