尝试提供文件时发生IOerror错误

尝试提供文件时发生IOerror错误

问题描述:

我正在尝试使用web.py框架将已处理数据的文件返回给webapp用户。在这个例子中,该文件被命名为plate3_v4.gb。我试图用名称results.gb返回它。这是基于this thread尝试提供文件时发生IOerror错误

下面的代码:

class ServeHandler(): 
    def GET(self): 
     web.header("Content-Disposition", "attachment; filename=%s" %"results.gb") 
     web.header("Content-Type", "gb") 
     web.header('Transfer-Encoding','chunked') 
     f = open('/usr/local/www/wsgi-scripts/uploads/plate3_v4.gb','rb') 
     while 1: 
      buf = f.read(1024 * 8) 
      if not buf: 
       break 
      yield buf 

当我去,我认为应该在数据服务给我的页面我得到

mod_wsgi (pid=21773): Exception occurred processing WSGI script '/usr/local/www/wsgi-scripts/code.py'. 
IOError: failed to write data 

在我的错误日志。

有什么想法?

首先,WSGI应用程序不应该设置Transfer-Encoding响应头本身。只有底层的Web服务器应该这样做。对于mod_wsgi,只要没有提供响应内容长度,Apache应该自动执行该操作。

至于错误,它表示客户端在读取所有返回的数据之前关闭了套接字连接。

+0

感谢有关Transfer Encoding的信息,但真的有必要不要设置它?如果web.py应用程序作为独立应用程序和mod_wsgi应用程序使用会怎样? (我只是想知道,因为这个问题是基于我在webpy组发布的代码) – 2012-08-09 06:19:44

+0

这不是您的WSGI应用程序,它以所需格式格式化响应内容。如果你这样做,你违反了WSGI规范,那么底层服务器领域就会担心这一点。 http://www.python.org/dev/peps/pep-0333/#other-http-features – 2012-08-09 08:33:57

+0

谢谢,那么这个食谱条目http://webpy.org/cookbook/streaming_large_files也是不正确的,因为它告诉设置分块标题。 – 2012-08-09 09:54:57