- Fixed compatibility for Django 4.1, 4.2
- Added Django 4 support.
- Added minio storage support.
- Added PrivateImageField.
- Added French locale.
- Fixed support for django-storages > 1.10.
- Fixed Django 4 deprecation warnings
- Dropped Python 2.7/3.4/3.5 support.
- Dropped Django 1.8/1.9/1.10/1.11 support.
- Fixed Django 3.0 compatibility.
- Make sure custom
403.html
template is used when access is denied. - Fixed accessing files when the
User-Agent
header is not set.
- Added efficient
HEAD
request handling. (Already in 2.2a1 at 2018-11-22)
- Fixed spelling error in "file too large" error.
- Fixed compatibility with latest django-storages which removed the
strict
setting keyword.
- Fixed
PrivateFile.exists()
check for<FieldFile: None>
values. - Added
PrivateFile.__repr__()
- Fixed
X-Accel-Redirect
non-ASCII filename encoding in Nginx.
- For very old Nginx versions, you'll have to configure
PRIVATE_STORAGE_NGINX_VERSION
, because Nginx versions before 1.5.9 (released in 2014) handle non-ASCII filenames differently.
- Added
serve_file_not_found()
to allow custom 404 serving inPrivateStorageView
andPrivateStorageDetailView
. - Added
Cache-Control
headers to avoid caching private files in edge proxies. - Fixed
PrivateStorageDetailView
to use using the custom storage class defined in the model'sPrivateFileField
. - Fixed
Content-Disposition
filename encoding in Python 3. - Fixed
Content-Disposition
filename support for old Internet Explorer browsers.
- Added Django 2.0 support.
- Support
upload_to
parameter and callable. - Support
upload_subfolder
to return a string instead of list. - Dropped Django 1.7 compatibility
- Fixed Python 2 support in
DjangoStreamingServer.serve()
.
- Fixed
reverse()
import for Django 2.0. - Fixed
UnicodeDecodeError
with cyrillic file names. - Fixed Python 2
super()
call.
- Fixed default
PRIVATE_STORAGE_AUTH_FUNCTION
path. - Added
PrivateFile.parent_object
field whenPrivateStorageDetailView
is used.
- Fixed
s3boto3
backend on Django 1.8.
- Added
Content-Disposition
header support, including a proper RFC-encoded filename. Add thecontent_disposition
field to the views to enable this. Thecontent_disposition_filename
andget_content_disposition_filename()
can be overwritten too.
- Allow AWS_PRIVATE.. credentials to be defined through environment variables too.
- Fixed
model_file_field
usage inPrivateStorageDetailView
.
- Implement proxying S3 content when
AWS_PRIVATE_QUERYSTRING_AUTH
is disabled. This can also be explicitly enabled usingPRIVATE_STORAGE_S3_REVERSE_PROXY = True
.
- Allow to configure the storage class, using
PRIVATE_STORAGE_CLASS
. There are 3 storage classes available:
private_storage.storage.files.PrivateFileSystemStorage
- the original, default.private_storage.storage.s3boto3.PrivateS3BotoStorage
- S3 bucket, based on django-storages.private_storage.storage.s3boto3.PrivateEncryptedS3BotoStorage
- S3 bucket with encryption.
- Added
PrivateStorageView.get_path()
method for easier reuse. - Added
PrivateStorageDetailView
for easier reuse in projects. - Added
@deconstructible
for storage classes. - Added
private_storage.servers.DjangoStreamingServer
to support streaming data from non-filesystem storages. - Dropped Django 1.6 support.
- Fixed Python 3 issue with lazy URL resolving.
- Fixed
TypeError
when calling the access check function. - Fixed file serving with
PRIVATE_STORAGE_SERVER
set todjango
.
- Fixed packaging NL translation
- Fixed error message for too large files.
First PyPI release.
The module design has been stable for quite some time, so it's time to show this module to the public.