- Added support to Python 3.10
- Added support to Django 5.0, 5.1
- Added Brazillian Portuguese (pt_BR) locale.
- Fixed compatibility for django-storages
- Clean Code
- 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.htmltemplate is used when access is denied. - Fixed accessing files when the
User-Agentheader is not set.
- Added efficient
HEADrequest 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
strictsetting keyword.
- Fixed
PrivateFile.exists()check for<FieldFile: None>values. - Added
PrivateFile.__repr__()
- Fixed
X-Accel-Redirectnon-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 inPrivateStorageViewandPrivateStorageDetailView. - Added
Cache-Controlheaders to avoid caching private files in edge proxies. - Fixed
PrivateStorageDetailViewto use using the custom storage class defined in the model'sPrivateFileField. - Fixed
Content-Dispositionfilename encoding in Python 3. - Fixed
Content-Dispositionfilename support for old Internet Explorer browsers.
- Added Django 2.0 support.
- Support
upload_toparameter and callable. - Support
upload_subfolderto 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
UnicodeDecodeErrorwith cyrillic file names. - Fixed Python 2
super()call.
- Fixed default
PRIVATE_STORAGE_AUTH_FUNCTIONpath. - Added
PrivateFile.parent_objectfield whenPrivateStorageDetailViewis used.
- Fixed
s3boto3backend on Django 1.8.
- Added
Content-Dispositionheader support, including a proper RFC-encoded filename. Add thecontent_dispositionfield to the views to enable this. Thecontent_disposition_filenameandget_content_disposition_filename()can be overwritten too.
- Allow AWS_PRIVATE.. credentials to be defined through environment variables too.
- Fixed
model_file_fieldusage inPrivateStorageDetailView.
- Implement proxying S3 content when
AWS_PRIVATE_QUERYSTRING_AUTHis 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
PrivateStorageDetailViewfor easier reuse in projects. - Added
@deconstructiblefor storage classes. - Added
private_storage.servers.DjangoStreamingServerto support streaming data from non-filesystem storages. - Dropped Django 1.6 support.
- Fixed Python 3 issue with lazy URL resolving.
- Fixed
TypeErrorwhen calling the access check function. - Fixed file serving with
PRIVATE_STORAGE_SERVERset 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.