3

我有一个 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",)的万一它是内存上传处理程序,但它没有任何区别。

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

4

2 回答 2

2

问题可能是:

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

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

于 2010-04-14T23:17:44.593 回答
2

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

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

找到了:

任何尝试运行最新 1.1 svn 版本的人都会注意到上述修复不再有效,因为 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

于 2010-05-26T03:44:12.967 回答