Python Twisted web-在响应客户端后保留请求数据

Python Twisted web-在响应客户端后保留请求数据,python,file-upload,upload,twisted,twisted.web,Python,File Upload,Upload,Twisted,Twisted.web,我有一个用TwistedWeb编写的前端web服务器,它与另一个web服务器接口。客户端将文件上载到我的前端服务器,然后前端服务器将文件发送到后端服务器。我希望接收上传的文件,然后在将文件发送到后端服务器之前立即向客户端发送响应。这样,客户机就不必等待两次上传发生后才得到响应 我试图通过在一个单独的线程中开始上传到后端服务器来实现这一点。问题是,在向客户端发送响应后,我无法再从请求对象访问上载的文件。下面是一个例子: class PubDir(Resource): def render

我有一个用TwistedWeb编写的前端web服务器,它与另一个web服务器接口。客户端将文件上载到我的前端服务器,然后前端服务器将文件发送到后端服务器。我希望接收上传的文件,然后在将文件发送到后端服务器之前立即向客户端发送响应。这样,客户机就不必等待两次上传发生后才得到响应

我试图通过在一个单独的线程中开始上传到后端服务器来实现这一点。问题是,在向客户端发送响应后,我无法再从
请求
对象访问上载的文件。下面是一个例子:

class PubDir(Resource):

    def render_POST(self, request):
        if request.args["t"][0] == 'upload':
            thread.start_new_thread(self.upload, (request,))

        ### Send response to client while the file gets uploaded to the back-end server:
        return redirectTo('http://example.com/uploadpage')

    def upload(self, request):
        postheaders = request.getAllHeaders()
        try:
            postfile = cgi.FieldStorage(
                fp = request.content,
                headers = postheaders,
                environ = {'REQUEST_METHOD':'POST',
                         'CONTENT_TYPE': postheaders['content-type'],
                        }
                )
        except Exception as e:
            print 'something went wrong: ' + str(e)

        filename = postfile["file"].filename

        file = request.args["file"][0]

        #code to upload file to back-end server goes here...

当我尝试此操作时,会出现一个错误:
对关闭的文件执行I/O操作

在完成请求对象之前,需要将文件实际复制到内存中的缓冲区或磁盘上的tempfile中(重定向时会发生这种情况)

因此,当您启动线程并将请求对象交给它时,它可能会打开到后端服务器的连接,并在重定向完成请求并关闭任何相关临时文件时开始复制,您会遇到麻烦

快速测试不是将整个请求传递给线程,而是将请求的内容传递给线程:

thread.start_new_thread(self.upload, (request.content.read(),))

在完成请求对象之前,您需要将文件实际复制到内存中的缓冲区或磁盘上的tempfile中(重定向时会发生这种情况)

因此,当您启动线程并将请求对象交给它时,它可能会打开到后端服务器的连接,并在重定向完成请求并关闭任何相关临时文件时开始复制,您会遇到麻烦

快速测试不是将整个请求传递给线程,而是将请求的内容传递给线程:

thread.start_new_thread(self.upload, (request.content.read(),))