将大文件分块上传到Django,如果上传中断则可以恢复上传。
项目描述
这个简单的Django应用程序使用户能够将大文件分块上传到Django,如果上传中断则可以恢复上传。
代码库的大部分属于juliomalegria的django-chunked-upload,并感谢他提供的这个优秀的包。
此应用程序旨在与Sebastian Tschan的JQuery-File-Upload配合使用 (文档)。
许可: MIT-Zero。
演示
如果您想查看使用此模块的非常简单的Django演示项目,请查看django-chunk-upload-demo。
安装
通过pip安装
pip install django-chunk-upload
然后将其添加到您的Django INSTALLED_APPS
INSTALLED_APPS = (
# ...
'django_chunk_upload',
)
典型用法
首先发送一个POST请求到链接到ChunkUploadView(或任何子类)的URL,附带文件的第一部分。块文件的名称可以在视图中重写(类属性field_name)。示例
{"my_file": <File>}
然后,服务器返回带有upload_id、当前offset和上传何时将过期的expires的响应。示例
{ "upload_id": "5230ec1f59d1485d9d7974b853802e31", "offset": 10000, "expires": "2013-07-18T17:56:22.186Z" }
重复使用upload_id发送后续块,以标识到ChunkUploadView(或任何子类)链接的URL。示例
{ "upload_id": "5230ec1f59d1485d9d7974b853802e31", "my_file": <File> }
服务器将继续响应带有 upload_id、当前 offset 和过期日期(expires)。
最后,当上传完成后,将向链接到 ChunkUploadCompleteView(或其任何子类)的url发送POST请求。此请求必须包含 upload_id 和 md5 校验和(十六进制)。示例
{ "upload_id": "5230ec1f59d1485d9d7974b853802e31", "md5": "fc3ff98e8c6a0d3087d515c0473f8677" }
如果一切正常,服务器将响应状态码200,并在方法 get_response_data 中返回数据(如果有)。
可能的错误响应
用户未认证。服务器响应403(禁止)。
上传已过期。服务器响应410(已消失)。
upload_id 与任何上传不匹配。服务器响应404(未找到)。
在指定的键中未找到任何块文件。服务器响应400(错误请求)。
请求不包含 Content-Range 头部。服务器响应400(错误请求)。
文件大小超出限制(如果指定)。服务器响应400(错误请求)。
偏移量不匹配。服务器响应400(错误请求)。
md5 校验和不匹配。服务器响应400(错误请求)。
设置
将这些变量中的任何一个添加到项目设置中即可覆盖它们。
DJANGO_CHUNK_UPLOAD_EXPIRATION_DELTA
创建后上传将过期的时长。
默认:datetime.timedelta(days=1)
DJANGO_CHUNK_UPLOAD_PATH
上传文件将在其中存储直到完成的路由。
默认:'chunk_uploads/%Y/%m/%d'
DJANGO_CHUNK_UPLOAD_TO
在模型的 FileField 中使用的 upload_to。
默认:DJANGO_CHUNK_UPLOAD_PATH + '/{{ instance.upload_id }}.part'
DJANGO_CHUNK_UPLOAD_STORAGE_CLASS
存储系统(应为一个类)。
默认:None(使用默认存储系统)
DJANGO_CHUNK_UPLOAD_ABSTRACT_MODEL
布尔值,定义 ChunkUpload 模型是否为抽象或不为抽象(抽象模型是什么意思?)。
默认:True
DJANGO_CHUNK_UPLOAD_NULL_USER
布尔值,定义 ChunkUpload 模型的“用户”字段是否可以为 NULL。
默认:True
DJANGO_CHUNK_UPLOAD_ENCODER
用于编码响应数据的函数。接收一个字典并返回一个字符串。
默认:DjangoJSONEncoder().encode
DJANGO_CHUNK_UPLOAD_CONTENT_TYPE
响应数据的 Content-Type。
默认:'application/json'
DJANGO_CHUNK_UPLOAD_MAX_BYTES
可上传的最大数据量(以字节为单位)。None 表示无限制。
默认:None
支持
如果您发现任何错误或想提出新功能,请使用 问题跟踪器。我将很高兴帮助您!:-)