2011-08-31 103 views
6

所以我有一个相当恼人的问题与文件上传在塔上,我希望有人能够帮助我。本来我发布的问题here认为这是一个问题与塔,但我从那里得出结论,这个问题是由于服务器,即粘贴,我已经确切地追查问题发生的地方,但我不确定如何解决它。行为如下。我有一个Pylons网络应用程序,我通过贴纸服务。应用程序的一部分允许用户将文件上传到系统,有时这些文件可能很大(> 50mb)。在这样的上传,服务器偶尔重置连接(即,在Chrome中的错误显示为“错误101(净值:: ERR_CONNECTION_RESET):连接被重置。”)这不总是发生,只有约50%的大文件的时间。连接重置在(大)文件上传

在这些情况下,服务器永远不会手中的POST到应用层面。没有例外(至少,我可以找到)。我将问题缩小到cascade.py(特别是从httpserver.py调用的wsgi_application方法)。从后者:

结果= self.server.wsgi_application(self.wsgi_environ,self.wsgi_start_response)

在cascade.py的呼叫功能,该文件显示被写入到一个临时文件。有关循环在开始:

而copy_len> 0:

它然后写入块逐一打开文件。这些写入都不会引发异常。然而,服务器通常会在这些写入过程中“离开”,似乎是随机的(时间似乎与此无关)。因此,如果我打印出正在减少的copy_len大小,我看它减少了一个点,然后服务器突然发送'连接重置'(或至少客户端认为它是)以及方法似乎退出了(copy_len停止打印,就好像循环已经退出,尽管它不是0)。

我完全难倒,因为1)这只是发生零星,和2)我似乎无法追踪到实际的错误/例外 - 只是有点它...死亡。

如果它的事项,我跑贴1.7.3,Python 2.7版和Fedora操作系统。有没有人对任何可能发生的情况有所了解,以及我如何能够解决这个问题?非常感谢您的帮助。

回答

1

两个想法浮现在脑海中......

  • 测试与另一个更强大的Web服务器,如nginx。如果需要,它可以同时运行。看看问题是否仍然存在。虽然粘贴可以处理Web应用程序,但据我所知,它并不意味着要处理巨大的文件传输。
  • 您在上传过程中是否使用Chunked Transfer Encoding
+0

+1这可能是一个web服务器问题比python/pylons更多的问题。 – Kekoa

0

我在Ubuntu 10.04上使用apache 2.2 + mod_python 3.3没有问题。我已成功上传大文件(400mb)。

我用uploader构建HTML上传表单。