Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python/Twisted——将Paramiko SFTPFile呈现为Twisted.web.static.File_Python_Http_Twisted - Fatal编程技术网

Python/Twisted——将Paramiko SFTPFile呈现为Twisted.web.static.File

Python/Twisted——将Paramiko SFTPFile呈现为Twisted.web.static.File,python,http,twisted,Python,Http,Twisted,在我提出这个问题之前,有一些背景知识:我正在创建一个web管理工具,它允许用户通过管理面板在预定义的目录之间下载、跟踪、发送电子邮件和移动文件。其中许多目录是服务器的本地目录,但有些目录实际上位于远程主机上,并通过SSH访问——不过,这对用户是透明的。我使用Twisted创建了一个供客户端访问的伪REST API,但由于我希望避免向客户端显示实际的服务器路径,因此它使用带有API任意ID的POST请求下载文件,例如:”http://XXXX:8880/api/transfer/download“

在我提出这个问题之前,有一些背景知识:我正在创建一个web管理工具,它允许用户通过管理面板在预定义的目录之间下载、跟踪、发送电子邮件和移动文件。其中许多目录是服务器的本地目录,但有些目录实际上位于远程主机上,并通过SSH访问——不过,这对用户是透明的。我使用Twisted创建了一个供客户端访问的伪REST API,但由于我希望避免向客户端显示实际的服务器路径,因此它使用带有API任意ID的POST请求下载文件,例如:
”http://XXXX:8880/api/transfer/download“
POST参数与此类似:
{“srckey”:“5”,“srcfile”:“solar2-windows-1.10.zip”}
。客户机只知道目录和文件名的键

请原谅过度的背景--我希望这能让我的问题更清楚:我的问题是,我试图允许用户通过托管web面板的管理服务器从一个“远程”主机下载文件副本,而无需在本地缓存文件。我以前使用Twisted的File()对象来流式处理大型静态文件,但由于该文件驻留在另一台服务器上,因此我尝试使用Paramiko的“open()”方法提供的File对象来完成同样的操作。

我尝试设置一个消费者/生产者系统,与twisted.web.static.File的渲染方法中使用的类似,将Paramiko提供的文件指针插入适当的位置,但只有最小的文本文件传输成功——所有情况都会导致Paramiko抛出此错误:
socket.error:套接字已关闭

相关python文件的内容如下:

  • service-project.py:
  • wrapsh.py:

简而言之,我试图将数据从Paramiko SFTPFile流式传输到HTTP客户端。我怀疑我的方法主要是错误的,因为我对Twisted不太熟悉。有人对实现这一点的更智能的方法有什么建议吗?

我为这段代码提前道歉——这是一个原型,非常需要重构。自从发布这篇文章以来,我实际上已经更改了我的项目,以便通过Crossbar.io和Autobahn使用WAMP进行通信。这个问题的答案仍然非常有用,但我的新系统也有同样的问题(如何通过现有WAMP连接传输二进制文件)。我有一个想法,如果我弄明白了,可能会关闭这个。很抱歉,在您的示例中有太多无关的代码,我不太确定您想问什么。Paramiko是一个阻塞SSH客户端,因此它不会与TwistedSuperwell集成;您可能想要海螺或只是通过OpenSSH生成进程。如果你能将其整理成一个独立的示例,并对问题陈述进行更简单的解释,那么回答起来就容易多了。我提前为代码道歉——这是一个原型,需要进行重构。既然发布了这个,我实际上已经改变了我的项目,以便通过Crossbar.io和高速公路使用WAMP进行通信。这个问题的答案仍然非常有用,但我的新系统也有同样的问题(如何通过现有WAMP连接传输二进制文件)。我有一个想法,如果我弄明白了,可能会关闭这个。很抱歉,在您的示例中有太多无关的代码,我不太确定您想问什么。Paramiko是一个阻塞SSH客户端,因此它不会与TwistedSuperwell集成;您可能想要海螺或只是通过OpenSSH生成进程。如果你能把它整理成一个独立的例子,对问题陈述进行更简单的解释,那么回答起来就容易多了。