背景
我正在 Django 上上传相当大的文件。文件大小一般为10MB-100MB。
我在 Heroku 上,我一直在达到 30 秒的请求超时。
开始
为了绕过限制,Heroku 的建议是从浏览器直接上传到 S3。
亚马逊通过向您展示如何编写HTML 表单来执行上传来记录这一点。
由于我使用的是 Django,而不是手动编写 HTML,我使用的是django-uploadify-s3(示例)。这为我提供了一个包裹在 JS 中的 SWF 对象,它执行实际的上传。
这部分工作正常!万岁!
问题
问题在于以一种理智的方式将这些数据绑定回我的 Django 模型。现在数据作为一个简单的 URL 字符串返回,指向文件的位置。
但是,我之前使用django-storages 的 S3 Boto来管理我的所有文件FileFields
,由令人愉快的S3BotoStorageFile
.
重申一下,S3 Boto 单独运行良好,Uploadify 单独运行良好,问题在于将两者放在一起。
我的理解是,填充的唯一方法FileField
是同时提供文件名和文件内容。当您将文件从浏览器上传到 Django 时,这没问题,因为 Django 将文件内容放在缓冲区中,并且可以随心所欲地使用它。但是,当像我一样进行直接到 S3 的上传时,Django 只接收文件名和 URL,而不是二进制数据,所以我无法正确填充FieldFile
.
求救
有人知道将 S3Boto 的 FileField 与直接到 S3 上传结合使用的优雅方式吗?
否则,仅基于 URL 管理 S3 文件的最佳方法是什么?包括设置过期时间、key id等。
非常感谢!