在我提出问题之前,有一些背景知识:我正在创建一个Web管理工具,除其他外,它允许用户通过管理面板在预定义目录之间下载,拖尾,发送电子邮件,移动文件。其中许多目录都是服务器的本地目录,但有些目录实际上位于远程主机上并通过SSH访问 - 但是,这对用户来说是透明的。我已经使用Twisted为客户端创建了一个伪REST API,但由于我想避免向客户端显示实际的服务器路径,它会使用带有任意ID的POST向api请求下载文件,如此:"http://XXXX:8880/api/transfer/download"
与POST params类似:{"srckey":"5","srcfile":"solar2-windows-1.10.zip"}
。作为客户端的想法只知道目录和文件名的密钥。
请原谅过多的背景 - 我希望它能让我的问题更加明确:我遇到的问题是我试图让用户从其中一个文件中下载文件的副本34;远程"通过托管Web面板的管理服务器托管主机,所有这些都不在本地缓存文件。我之前使用过Twisted的File()对象来流式传输大型静态文件,但由于该文件位于另一台服务器上,我试图使用Paramiko提供的文件对象来完成相同的操作#39 ; s" open()"方法。
我尝试建立一个类似于twisted.web.static.File的render方法中使用的消费者/生产者系统,插入Paramiko在适当位置提供的文件指针,但只有最小的文本文件成功传输 - 所有情况都会导致Paramiko抛出此错误:
socket.error: Socket is closed
相关python文件的内容如下:
简而言之,我尝试将数据从Paramiko SFTPFile传输到HTTP客户端。由于我对Twisted的熟悉程度很低,我怀疑我的方法主要是错误的。任何人都有更聪明的方法来实现这个目标吗?