无法在Django中上传大量文件

时间:2012-03-04 01:13:36

标签: django django-file-upload

在Django中上传大量文件时遇到问题。上下文如下:我有一个电子表格,其中一列或多列是图像文件名;这些图像是通过输入类型=文件和选项倍数的表单上传的。

几条线 - 比如70,一切都很顺利。但是随着更多的线条,以及更多的图像,随机位置会发生IOError。

我在Django上查了几个关于文件/图片上传的问题,但找不到与我的问题有关的任何问题。

我使用的模型是LFS的产品型号(www.getlfs.com)。我们正在开发一个基于LFS的系统,为了便于批量创建数十种产品,我们编写了一些视图和模板,通过电子表格接收主要产品属性。每一行都是一个产品,列是所需的属性。

LFS使用自定义类ImageWithThumbsField(ImageField)来存储产品的图像,在保存产品实例(从电子表格中获取)时,会生成所有缩略图。这是一个消耗时间(cpu)的任务,我最初的猜测是,由于某种原因,临时文件在所有处理发生之前被删除。

有没有办法让这些上传的文件停留更长时间?任何其他方法建议能够处理数百个上传的文件?关于可能发生的事情的任何提示?

希望你能理解我的问题。如果需要,我可以发布代码。

链接到LFS代码的相关部分:

  • 生成缩略图:

https://github.com/diefenbach/django-lfs/blob/master/lfs/core/fields/thumbs.py

  • 产品型号

https://github.com/diefenbach/django-lfs/blob/master/lfs/catalog/models.py

提前致谢!

1 个答案:

答案 0 :(得分:1)

听起来你的内存不足了。当django processesss上传时,在表单验证之前,所有文件都是:

  • 保存在python / wsgi进程/ worker中的内存中。(运行服务器的op的常用模式)

    在这种情况下,您正在上传足够的照片以填满进程内存并且空间不足。对于IOError发生的位置(GC Dependent),这将是不确定的。

  • 暂时存储在/ tmp / (通常设置为apache)

    在这种情况下,网络服务器的ramfs中充满了尚未写入磁盘的图像。在这种情况下,它应该IOError在同一个地方。

在任何一种情况下,您都不应该以这种方式批量上传图片。 Apache / Django不是为它而设计的。尝试按照请求/响应上传单个产品/图片,所有问题都将消失。