如何处理上传文件的临时存储

时间:2010-09-11 00:46:54

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

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

1 个答案:

答案 0 :(得分:1)

如果要上传的文件大小超过几KB,那么您可能不希望将它们存储在会话中(并且您绝对不希望通过GET将它们发送回浏览器) )。

我可以想到几个选项:

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