簡體   English   中英

使用扭曲處理文件

[英]Using twisted to process files

我正在嘗試建立一個扭曲的xmlrpc服務器,該服務器將接受來自客戶端的文件,進行處理,然后返回文件和結果字典。

我以前使用過python,但從未使用過扭曲的庫。 出於我的目的,安全性不是問題,並且ssh協議似乎有些過分。 由於termios不可用,因此在Windows服務器上也有問題。

因此,我所有的研究都指出xmlrpc是實現此目標的最佳方法。 但是,有兩種可用的文件傳輸方法。 使用xml binary data方法或http request方法。

無論哪種方式,文件最多可以容納數百兆,那么我應該使用哪種方法? 感謝我提供示例代碼,因為我找不到扭曲的xml上文件傳輸的文檔。

更新:

因此,似乎使用xmlrpclib.Binary序列化文件不適用於大文件,或者我使用的是錯誤的。 測試代碼如下:

from twisted.web import xmlrpc, server

class Example(xmlrpc.XMLRPC):
    """
    An example object to be published.
    """

    def xmlrpc_echo(self, x):
        """
        Return all passed args.
        """
        return x

    def xmlrpc_add(self, a, b):
        """
        Return sum of arguments.
        """
        return a + b

    def xmlrpc_fault(self):
        """
        Raise a Fault indicating that the procedure should not be used.
        """
        raise xmlrpc.Fault(123, "The fault procedure is faulty.")

    def xmlrpc_write(self, f, location):
        with open(location, 'wb') as fd:
            fd.write(f.data)

if __name__ == '__main__':
    from twisted.internet import reactor
    r = Example(allowNone=True)
    reactor.listenTCP(7080, server.Site(r))
    reactor.run()

和客戶端代碼:

import xmlrpclib
s = xmlrpclib.Server('http://localhost:7080/')
with open('test.pdf', 'rb') as fd:
    f = xmlrpclib.Binary(fd.read())
s.write(f, 'output.pdf')

我得到xmlrpclib.Fault: <Fault 8002: "Can't deserialize input: ">在我對此進行測試時, xmlrpclib.Fault: <Fault 8002: "Can't deserialize input: "> 是否因為文件是pdf文件?

XML-RPC是文件傳輸的不佳選擇。 XML-RPC要求以XML支持的方式對文件內容進行編碼。 這在運行時成本和網絡資源上都是昂貴的。 相反,請嘗試僅使用普通的舊HTTP發布或放置文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM