django/django存储线程s3块上载程序
s3chunkuploader的Python项目详细描述
一个django文件处理程序,用于管理直接上传到s3的管道文件,而无需通过服务器的文件系统。 上载程序使用多个线程来加速更大文件的上载。 此包依赖于django和django存储,允许使用s3 storages文件字段,但会更改 上载行为以绕过本地文件系统。
快速启动
安装软件包:
pip install s3chunkuploader
设置django文件上载处理程序设置:
FILE_UPLOAD_HANDLERS = (‘s3chunkuploader.file_handler.S3FileUploadHandler’,)
工作原理
文件处理程序在门口截获文件上载多部分请求,并从 浏览器中,它们被收集到自定义threadpoolworker中的内部队列中。当队列超过可配置的 大小(默认为5MB,这是S3多部分上传的最小部分大小),它被提交到线程池 作为一个未来,这将解决。一旦所有的块被上传,所有的未来都被解决,上传就完成了。 默认情况下,使用10个线程,这意味着100MB文件上传可能作为205MB部分发送到S3。
filehandler最终返回一个'dummy'django storages s3boto3storagefile,该文件与存储兼容 S3文件字段,但实际上并不用于上载完整文件。该文件还增强了两个附加属性:
original_name: The original file name uploaded file_size: The actual full file size uploaded
建议在上载文件视图中绕过csrf检查,因为csrf检查将在 使用处理程序。 fields.py中提供了替换文件字段s3 file field,并对s3对象键感到满意
设置
Django应用程序中需要以下设置(仅需要2个)
Setting | Description |
---|---|
AWS_ACCESS_KEY_ID | Required. Your AWS access key |
AWS_SECRET_ACCESS_KEY | Required. The AWS secret |
AWS_REGION | Optional. Region of S3 bucket |
S3_DOCUMENT_ROOT_DIRECTORY | Optional. Document root for all uploads (prefix) |
S3_APPEND_DATETIME_ON_UPLOAD | Optional [True]. Appent the current datetime sring to the uploaded file name |
S3_PREFIX_QUERY_PARAM_NAME | Optional [__prefix]. A query param key name which provides additional prefix for the object key on S3 |
S3_MIN_PART_SIZE | Optional [5MB]. The part size in bytes to upload to S3 |
MAX_UPLOAD_SIZE | Optional [None]. The maximum file size in bytes for an individual file. |
S3_ENDPOINT_URL | Optional [None]. The s3 endpoint url which overrides the default |