2012-03-04 61 views
1

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

在此先感谢!

+0

您能否请您发布追踪错误?你如何运行你的应用程序?通过Web服务器或Django的devserver也会引发错误? – ilvar 2012-03-04 02:41:19

+0

在接下来的4天内,追溯的部分内容将在http://dpaste.com/711195/ – momenezes 2012-03-04 19:03:35

回答

1

这听起来像你内存不足。当Django processess上传,直到形式验证所有的文件都可以:

  • 保持在Python/WSGI过程/工人内存里。(运行服务器的普通模式)

    在这种情况下,您正在上传足够的照片来填充进程内存并耗尽空间。对于IOError发生的位置,您可以想象这将是非确定性的(GC依赖)。

  • 暂时存储在/ tmp/(阿帕奇的通常设置)

    在这种情况下,Web服务器的RAMFS充满尚未被写入磁盘映像。在这种情况下,应该在同一个地方放置IOError。

不管怎样,您都不应该以这种方式批量上传图片。 Apache/Django不是为它设计的。尝试上传每个请求/响应的单个产品/图片,所有问题都将消失。

+0

+0.5中相当大胆; +0.5因为我喝醉了。似乎也是一个受过教育的答案 - 但我只能提供1分。 – dokkaebi 2012-03-04 05:46:20

+0

@Thomas:看起来你的答案非常接近或者确实是真实的事实。当PIL尝试读取文件时,它是一个0KB文件,可能是由于您编写的一些原因。 您是否认为将临时存储更改为磁盘可能有所帮助? 感谢您的回答。 – momenezes 2012-03-04 19:09:34

+0

@momenezes是否真的有必要上传1请求中的所有图片?我不知道有什么方法可以在django中进行基于磁盘的上传。 – Thomas 2012-03-05 05:56:11