使用 Flask 处理超大文件上传(1 GB 以上)的最佳方式是什么?
我的应用程序本质上是获取多个文件,为它们分配一个唯一的文件编号,然后根据用户选择的位置将其保存在服务器上。
我们如何将文件上传作为后台任务运行,以便用户不会让浏览器旋转 1 小时,而是可以立即进入下一页?
- Flask 开发服务器能够处理大量文件(50gb 需要 1.5 小时,上传很快但将文件写入空白文件非常慢)
- 如果我用 Twisted 包装应用程序,应用程序会在处理大文件时崩溃
- 我试过将 Celery 与 Redis 一起使用,但这似乎不是发布上传的选项
- 我在 Windows 上,网络服务器的选项较少
原文由 Infinity8 发布,翻译遵循 CC BY-SA 4.0 许可协议
我认为解决问题的超级简单方法就是将文件分成许多小部分/块。因此,将有两个部分来完成这项工作,即前端(网站)和后端(服务器)。对于前端部分,您可以使用类似
Dropzone.js
类的东西,它没有额外的依赖项并且包含不错的 CSS。您所要做的就是将类dropzone
添加到一个表单中,它会自动将其变成它们的特殊拖放字段之一(您也可以单击并选择)。但是,默认情况下,dropzone 不会分块文件。幸运的是,启用它真的很容易。这是启用了
DropzoneJS
和chunking
的示例文件上传表单:这是使用烧瓶的后端部分: