跳转到主要内容

将大文件分块上传到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',
)

典型用法

  1. 首先发送一个POST请求到链接到ChunkUploadView(或任何子类)的URL,附带文件的第一部分。块文件的名称可以在视图中重写(类属性field_name)。示例

{"my_file": <File>}
  1. 然后,服务器返回带有upload_id、当前offset和上传何时将过期的expires的响应。示例

{
    "upload_id": "5230ec1f59d1485d9d7974b853802e31",
    "offset": 10000,
    "expires": "2013-07-18T17:56:22.186Z"
}
  1. 重复使用upload_id发送后续块,以标识到ChunkUploadView(或任何子类)链接的URL。示例

{
    "upload_id": "5230ec1f59d1485d9d7974b853802e31",
    "my_file": <File>
}
  1. 服务器将继续响应带有 upload_id、当前 offset 和过期日期(expires)。

  2. 最后,当上传完成后,将向链接到 ChunkUploadCompleteView(或其任何子类)的url发送POST请求。此请求必须包含 upload_idmd5 校验和(十六进制)。示例

{
    "upload_id": "5230ec1f59d1485d9d7974b853802e31",
    "md5": "fc3ff98e8c6a0d3087d515c0473f8677"
}
  1. 如果一切正常,服务器将响应状态码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

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

支持

如果您发现任何错误或想提出新功能,请使用 问题跟踪器。我将很高兴帮助您!:-)

项目详情


下载文件

为您的平台下载文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

django-chunk-upload-2.0.0.tar.gz (10.4 kB 查看散列)

上传时间

构建分布

django_chunk_upload-2.0.0-py3-none-any.whl (11.3 kB 查看散列值)

上传于 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面