1

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

用几行 - 比如 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

提前致谢!

4

1 回答 1

1

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

  • 保存在 python/wsgi 进程/worker 中的内存中。(runserver的常用操作模式)

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

  • 临时存放在/tmp/(apache的常用设置)

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

无论哪种情况,您都不应该以这种方式批量上传图像。Apache/Django 不是为它设计的。尝试根据请求/响应上传单个产品/图像,您的所有问题都会消失。

于 2012-03-04T03:08:44.737 回答