如何使用默认文件存储(S3)通过 Django FormTools 表单向导上传文件?
Posted
技术标签:
【中文标题】如何使用默认文件存储(S3)通过 Django FormTools 表单向导上传文件?【英文标题】:How can I use the Default File Storage(S3) to upload files with Django FormTools form wizard? 【发布时间】:2017-11-30 20:00:08 【问题描述】:在上传文件时,django-formtools 表单向导需要一个地方来临时存储文件,直到用户完成向导中的所有步骤。
FormTools documentation 显示了如何将文件上传到服务器上的本地文件夹的示例。上传文件需要 file_storage 设置。
from django.core.files.storage import FileSystemStorage
class CustomWizardView(WizardView):
file_storage = FileSystemStorage(location=os.path.join(settings.MEDIA_ROOT, 'photos'))
我们使用 Heroku,上传文件时无法访问本地存储。我们使用 django-storages 和 S3 来存储我们所有的文件。我想使用 django-storages 来管理上传过程。
我怎样才能修改这个视图,以便我们使用默认存储系统将此文件上传到 S3 上的临时位置?
【问题讨论】:
您的文件是否至少保存在生产服务器的临时位置?或者您只能获取内存文件对象而无法保存它。 @ArpitSolanki 是的,文件保存到代码示例中配置的临时位置。我只是不希望它保存在服务器上;主要是因为在生产中我们无法将其保存到服务器。我不相信内存会起作用,因为 formtools 想要一个物理文件。 【参考方案1】:此配置将允许您将文件直接上传到 django 项目的默认存储后端。您可以在documentation 中了解它的工作原理。
from django.core.files.storage import DefaultStorage
class CustomWizardView(WizardView):
...
file_storage = DefaultStorage()
【讨论】:
以上是关于如何使用默认文件存储(S3)通过 Django FormTools 表单向导上传文件?的主要内容,如果未能解决你的问题,请参考以下文章
在自定义目录名称下将 Firehose 传输的文件存储在 S3 中
如何使用 IAM 角色通过 aws sdk (java) 从 ECS 容器调用 s3 存储桶
使用 Django 存储和 S3 在 collectstatic 上出现 MemcachedError