我正在使用Django、AWS S3开发一个应用程序,并托管在Heroku上。
有一次,用户必须上传多个大文件,每次总计约150MB。我尝试过各种方法。
第一次尝试:直接调用Django表单的save方法:结果:请求耗时超过30秒,并返回超时。
第二次尝试:将文件临时保存到Heroku目录,并从Celery任务中读取。结果:无法保存,因为它抛出FileNotFoundError:[Erno 2]生产中没有这样的文件或目录。
第三次尝试:将上传的文件(内存中的文件(传递给一个芹菜任务,但字节无法序列化并传递给该任务,无论是使用json还是pickle。
有人能帮我吗?提前感谢。
另一种方法可以是
- 公开一个API来为前端生成预签名的URL(步骤在这里(
- 使用该URL以异步方式从前端上传文件。这将在后端卸载您的计算
- 上传成功后,您将获得文件位置的URL。现在将S3 URL和其他字段数据保存到Django模型中
使用此方法可以上载超过150MB的文件大小。您的系统将具有可扩展性。