【问题标题】:Django upload failing on request data read errorDjango上传失败请求数据读取错误
【发布时间】:2011-02-08 03:48:19
【问题描述】:

我有一个 Django 应用程序,它接受来自 jQuery uploadify 的上传,这是一个使用 flash 上传文件并提供进度条的 jQ 插件。

大约 150k 的文件可以工作,但较大的文件总是失败,并且几乎总是在 192k 左右(即 3 个块)完成,有时在 160k 左右。我得到的异常如下。

exceptions.IOError
request data read error
File "/usr/lib/python2.4/site-packages/django/core/handlers/wsgi.py", line 171, in _get_post
    self._load_post_and_files()
File "/usr/lib/python2.4/site-packages/django/core/handlers/wsgi.py", line 137, in _load_post_and_files
    self._post, self._files = self.parse_file_upload(self.META,     self.environ[\'wsgi.input\'])
File "/usr/lib/python2.4/site-packages/django/http/__init__.py", line 124, in parse_file_upload
    return parser.parse()
File "/usr/lib/python2.4/site-packages/django/http/multipartparser.py", line 192, in parse
    for chunk in field_stream:
File "/usr/lib/python2.4/site-packages/django/http/multipartparser.py", line 314, in next
    output = self._producer.next()
File "/usr/lib/python2.4/site-packages/django/http/multipartparser.py", line 468, in next
    for bytes in stream:
File "/usr/lib/python2.4/site-packages/django/http/multipartparser.py", line 314, in next
    output = self._producer.next()
File "/usr/lib/python2.4/site-packages/django/http/multipartparser.py", line 375, in next
    data = self.flo.read(self.chunk_size)
File "/usr/lib/python2.4/site-packages/django/http/multipartparser.py", line 405, in read
    return self._file.read(num_bytes)

在 Django 开发服务器上本地运行时,可以使用大文件。
我尝试设置我的FILE_UPLOAD_HANDLERS = ("django.core.files.uploadhandler.TemporaryFileUploadHandler",),以防它是内存上传处理程序,但没有任何区别。

有谁知道如何解决这个问题?

【问题讨论】:

    标签: django upload uploadify


    【解决方案1】:

    问题可能是:

    • 您的互联网连接(某些防火墙阻止了大型上传,只需尝试上传到其他服务进行测试)。
    • 您的网络浏览器(尝试禁用 Flash 以查看是否有效)
    • 您的网络服务器(也许您的网络服务器禁止大量上传?)

    所以...为了更有帮助,您必须向我们提供一些信息,说明哪一部分是问题(应该很容易测试)以及是否是网络服务器(我猜是哪一种)你正在运行的网络服务器,什么样的 Python 处理程序(mod_wsgi、mod_python、fastcgi 等)

    【讨论】:

    • 刚刚测试了在另一个站点上传大文件没有问题。我正在运行 python 2.4、django 1.1、mod_wsgi。我现在尝试在没有 Flash 上传器的情况下测试上传。
    • 我可以使用 Django 管理界面(普通表单文件字段)上传到同一服务器上的不同 Django 项目。所以也许这是一个 flash 或 uplodify 问题,我不知道从哪里开始解决这个问题。
    • 另一个更新,我创建了一个表单发布到与 uploadify 相同的位置,我得到了同样的错误。所以......不是我的浏览器或互联网连接,不是我的服务器,不是uploadify。我可以看到有效项目和无效项目之间的主要区别是一个使用 django 管理界面上传到模型文件字段,而损坏的项目只是将下载文件放在一个文件夹中。但我遇到的错误是读取错误。
    • “读取错误”表示服务器由于某种原因失去了与客户端的连接。所以......在上传期间,连接以某种方式中断,服务器无法再从客户端读取新数据。不过,我无法解释它,如果它也不能使用正常的上传表单......你正在运行什么浏览器、服务器和 Python 处理程序?我猜你的网络服务器/网络浏览器中的一些错误正在咬你。
    • 我用的是FF3/windows。在 Chrome/windows 中,它在失败之前会达到更高的百分比。在 FF3/mac 中它可以工作!我不确定你所说的 Python Handler 是什么意思,是 mod_wsgi/apache 吗?我在 media Temple DV 服务器上运行 centOS(python 2.4,django 1.1)
    【解决方案2】:

    这在 MediaTemple 中很常见——我遇到了这个问题,修复了它,但不知何故又坏了。它必须处理有关 NFS 锁定以及 django 存储模块使用的系统调用的问题。

    ...(10 分钟后)...

    找到了:

    任何尝试运行最新 1.1 的人 svn release 会注意到 上述修复不再有效,因为 TemporaryFileUploaderHandler 现在使用 锁定代码也。一种解决方法 直到 mediatemple 和/或 django 开发人员 弄清楚这是要编辑 django.core.files.locks 并更改 两次调用 fcntl.lockf 到 fcntl.flock

    这是一个相关的错误报告 任何有兴趣的人: http://code.djangoproject.com/ticket/9400

    http://osdir.com/ml/DjangoUsers/2009-06/msg01014.html -> https://forums.mediatemple.net/viewtopic.php?id=2514

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      • 2020-01-13
      • 2014-12-14
      • 2020-10-03
      • 2021-11-12
      相关资源
      最近更新 更多