【问题标题】:How to deal with temporary storage of uploaded files如何处理上传文件的临时存储
【发布时间】:2011-04-10 23:57:33
【问题描述】:

在我的 django 应用程序中,我有一个多步骤注册,条件参数很少。因此,我想在会话中存储表单中的数据。不幸的是,会话使用 pickle 序列化数据,它不支持文件序列化并导致
PicklingError: Can't pickle <type 'cStringIO.StringO'>: attribute lookup cStringIO.StringO failed 。如何解决这个问题?我应该将图像作为变量发送到所有后续视图,还是将其作为 GET 参数发送或以其他方式发送?我不确定是否需要任何示例代码,因为问题似乎很清楚。

【问题讨论】:

    标签: django django-file-upload django-sessions static-files


    【解决方案1】:

    如果正在上传的文件大于几 KB,那么您可能不想将它们存储在会话中(并且您肯定不想通过 GET 将它们发送回浏览器)。

    我能想到几个选项:

    • 您可以重写您的注册表单,以便上传的文件排在最后。
    • 您可以将表单设置为单步,并使用 javascript 伪造多步(例如,通过隐藏和显示 DIV)。
    • 您可以将临时文件保存在磁盘上,并将文件名存储在会话中(记得定期清理旧文件)
    • 您可以简化您的注册,并在“个人资料”页面上上传文件(也许在允许访问该网站的其余部分之前强制执行“您必须填写个人资料”要求)。

    【讨论】:

    • 我猜我对第三种方法最感兴趣,因为据我所知,django 本身将所有文件存储在 temp 中。但是我怎样才能只存储文件的路径而不是文件本身呢?我的调试显示 ImageFileField 发送文件对象,而不仅仅是字符串路径。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 2015-07-07
    相关资源
    最近更新 更多