一个django小部件库,用于安全地将文件直接上传到S3(或MinIO)。

django-s3-file-field的Python项目详细描述


django-s3-file-field

PyPI version shields.ioPyPI - Python VersionPyPI - Django Version

django-s3-file-field是一个Django小部件库,用于直接将文件上载到S3 (或MinIO)通过浏览器。django-s3-file-field在很大程度上依赖于 django-storages包。在

快速启动

确保已将Django安装配置为使用django-storages进行S3访问:https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html。在

安装django-s3-file-field包:

pip install django-s3-file-field

s3_file_field添加到您的INSTALLED_APPS

^{pr2}$

添加所需的设置:

S3FF_UPLOAD_STS_ARN=''# see STS Role section below (not required for minio)

将适当的路由添加到urls.py

urlpatterns=[...path('api/s3-upload/',include('s3_file_field.urls')),]

使用

froms3_file_fieldimportS3FileFieldclassCar(db.Model):...owners_manual=S3FileField()

运行检查

django-s3-file-field可以使用django内置的System check framework检测常见的错误配置。确认 您的配置正确,请运行:

./manage.py check

高级主题

高级配置

KeyDefaultDescription
S3FF_UPLOAD_STS_ARNnone...

STS配置

CORS配置

这是一个与django-S3-file-field兼容的S3 bucket的最小功能CORS配置:

<?xml version="1.0" encoding="UTF-8"?><CORSConfigurationxmlns="http://s3.amazonaws.com/doc/2006-03-01/"><CORSRule><AllowedHeader>*</AllowedHeader><AllowedMethod>POST</AllowedMethod><AllowedMethod>PUT</AllowedMethod><AllowedOrigin>*</AllowedOrigin><ExposeHeader>Connection</ExposeHeader><ExposeHeader>Content-Length</ExposeHeader><ExposeHeader>Date</ExposeHeader><ExposeHeader>ETag</ExposeHeader><ExposeHeader>Server</ExposeHeader><ExposeHeader>x-amz-delete-marker</ExposeHeader><ExposeHeader>x-amz-version-id</ExposeHeader><MaxAgeSeconds>600</MaxAgeSeconds></CORSRule></CORSConfiguration>

注意:这些都是不安全的默认值,允许的源和头不应该是通配符,而应该是通配符 针对您的特定部署进行了修改。在

MinIO支持

MinIO支持取决于django MinIO存储配置(请参见https://django-minio-storage.readthedocs.io/en/latest/usage/),使用以下设置

安全考虑事项

与表单集成

如果要在表单中使用S3FileField,则需要在前端注入一些额外的客户端代码。 表单提交只与Django通信,因此web客户端必须在表单提交之前以某种方式将数据直接发送到S3。 必要的<script>在模板中可用作form.media,它应该嵌入到表单模板中,类似于:

...
<head>
  {{ form.media }}
</head>
...

该脚本将检测表单中呈现的任何s3filefield,并动态重写它们,以便在选择文件时将数据直接上载到S3。在

延伸

django-s3-file-field在调用其REST api时发出两个信号:

s3_file_field_upload_prepare(name:str,object_key:str)s3_file_field_upload_finalize(name:str,object_key:str,status:string)

API参考

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java创建猜谜游戏程序   JavaWebSocketContainer。connectToServer似乎挂起了   如何在java中中断函数   java c#socket client multiple BeginSend()未到达服务器   不可见的组件然后在Java中的窗格之间切换   java在应用程序类中使用静态接口安全吗?   java等待函数完成,直到回调到来   使用DataOutputStream时的java新行,Android   java服务对象的定义是什么?   基于视图的javahibernate复合密钥   java将varchar连接到char在JPA(oracle)中不起作用   如何在java中通过point类读取多个点?