首页 > 解决方案 > 我无法上传多个大文件

问题描述

我正在使用 Django、AWS S3 开发一个应用程序并托管在 Heroku 上。

在某一时刻,用户必须上传多个大文件,每次总计大约 150MB。我尝试了各种方法。

第一次尝试:直接调用Django表单的save方法: 结果:请求耗时30多秒,返回超时。

第二次尝试:暂时将文件保存到 Heroku 目录并从 Celery 任务中读取。结果:无法保存,因为它抛出 FileNotFoundError: [Errno 2] No such file or directory on production。

第三次尝试:将上传的文件(在内存文件中)传递给 celery 任务,但字节不能被序列化,也不能使用 json 或 pickle 传递给任务。

有人可以帮我吗?提前谢谢。

标签: djangoamazon-s3herokuserializationcelery

解决方案


另一种方法可以是这样

  1. 公开一个 API 来为前端生成预签名 URL(步骤在这里)。
  2. 以异步方式从前端使用该 URL 上传文件。这将在后端卸载您的计算。
  3. 上传成功后,你会得到一个文件位置的URL。现在将 S3 URL 与其他字段数据一起保存到 Django 模型。

您可以通过此方法上传超过 150MB 的文件大小。您的系统将是可扩展的。


推荐阅读