微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django rest框架大文件上传

如何解决Django rest框架大文件上传

是否有一种简单的方法可以将大文件从客户端上传到 django rest 框架端点。在我的应用程序中,用户上传非常大的文件 (>4gb)。浏览器有上传限制,这是图表。

enter image description here

我目前的想法是从客户端分块上传文件并从其余端点接收块。但我将如何做到这一点?我看到了一些库,例如 - resumable.js、tus.js、flow.js 等。但是我将如何处理后端中的块?有没有针对这样的问题积极维护的图书馆?请帮帮我。

解决方法

也许这个模块可以帮助:https://github.com/jkeifer/drf-chunked-upload。 该模块在链接处用于示例 django 应用程序,并带有示例代码用于实现。这是该模块提供的典型用例,为了简单起见,没有示例代码(如果需要,代码在链接中):

  1. 一个初始的 PUT 请求被发送到链接到 ChunkedUploadView(或任何子类)的 url 和文件的第一个块。可以在视图中覆盖块文件的名称(类属性field_name)。

  2. 作为回报,服务器将返回上传的 url 和当前偏移量。

3 重复PUT后续块到服务器返回的url。

  1. 服务器将继续响应 url 和当前偏移量。

  2. 最后,上传完成后,向返回的url POST一个请求。此请求必须包含整个文件的校验和(十六进制)。

  3. 如果一切正常,服务器将响应状态代码 200 和方法 get_response_data 中返回的数据(如果有)。

  4. 如果您想将文件作为单个块上传,这也是可以的!只需将第一个请求设为 POST 并包含文件的校验和摘要。如果上传整个文件,则不需要包含 Content-Range 标头。

根据这些说明,服务器似乎通过接收到的标头 ("Content-Range") 及其 url 跟踪块的偏移量来处理上传,将上传的块存储在 .part 文件中。然后它的响应如下:

   {
        'id': 'f64ebd67-83a3-45b6-8acd-c749ea1ed4cd'
        'url': 'https://your-host/<path_to_view>/f64ebd67-83a3-45b6-8acd-c749ea1ed4cd','file': 'https://your-host/<path_to_file>/f64ebd67-83a3-45b6-8acd-c749ea1ed4cd.part','filename': 'example.bin','offset': 10000,`created_at`: '2021-05-18T17:12:50.318718Z','status': 1,'completed_at': None,'user': 1
    }

当根据收到的标头确定上传完整文件时,.part 文件将合并到最终上传中。这也允许您在上传中断时恢复上传,因为现有的 .part 文件会一直存在,直到上传完成。

,

https://stackoverflow.com/a/26278960/12776116

也许这可以帮到你。正如您提到的,文件是通过将其分成小部分来上传的。

,

你应该用芹菜任务来做。

看看这个link。它解释了如何使用 django 和 celery 上传文件。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。