Python 使用file.write接口上载文件

Python 使用file.write接口上载文件,python,Python,我从未在Python中见过这种情况,我很感兴趣的是,是否有任何东西可以让您发送文件,例如HTTP PUT或POST,并带有一个写接口?我只见过一个读取接口,其中传递文件名或文件对象urllib、请求等 当然,我可能从来没有看到过这一点,我也很想知道这一点。虽然从较高的层次上看,这可能是有意义的,但让我们尝试将文件接口映射到HTTP谓词: file interface http ------------------------ read GET

我从未在Python中见过这种情况,我很感兴趣的是,是否有任何东西可以让您发送文件,例如HTTP PUT或POST,并带有一个写接口?我只见过一个读取接口,其中传递文件名或文件对象urllib、请求等


当然,我可能从来没有看到过这一点,我也很想知道这一点。

虽然从较高的层次上看,这可能是有意义的,但让我们尝试将文件接口映射到HTTP谓词:

file interface   http
------------------------
read             GET
                 HEAD
------------------------
write            POST
                 PUT
                 PATCH
------------------------
?                DELETE
                 OPTIONS
如您所见,文件接口和任何RESTful接口所需的HTTP谓词集之间没有明确的映射。当然,您可能会一起破解一个只使用GET read和POST write的实现,但这将打破您需要扩展它以支持任何其他HTTP谓词的第二个实现

根据评论进行编辑:

我自己还没有尝试过,但它看起来像是在http/client.py的深处,如果数据实现了读取,它将按如下方式读取:

        while 1:
            datablock = data.read(blocksize)
            if not datablock:
                break
            if encode:
                datablock = datablock.encode("iso-8859-1")
            self.sock.sendall(datablock)
但请注意这样做可能会对性能造成的影响:

# If msg and message_body are sent in a single send() call,
# it will avoid performance problems caused by the interaction
# between delayed ack and the Nagle algorithm. However,
# there is no performance gain if the message is larger
# than MSS (and there is a memory penalty for the message
# copy).

因此,是的,您应该能够将文件对象作为数据参数传入。

虽然它看起来在较高级别上有意义,但让我们尝试将文件接口映射到HTTP谓词:

file interface   http
------------------------
read             GET
                 HEAD
------------------------
write            POST
                 PUT
                 PATCH
------------------------
?                DELETE
                 OPTIONS
如您所见,文件接口和任何RESTful接口所需的HTTP谓词集之间没有明确的映射。当然,您可能会一起破解一个只使用GET read和POST write的实现,但这将打破您需要扩展它以支持任何其他HTTP谓词的第二个实现

根据评论进行编辑:

我自己还没有尝试过,但它看起来像是在http/client.py的深处,如果数据实现了读取,它将按如下方式读取:

        while 1:
            datablock = data.read(blocksize)
            if not datablock:
                break
            if encode:
                datablock = datablock.encode("iso-8859-1")
            self.sock.sendall(datablock)
但请注意这样做可能会对性能造成的影响:

# If msg and message_body are sent in a single send() call,
# it will avoid performance problems caused by the interaction
# between delayed ack and the Nagle algorithm. However,
# there is no performance gain if the message is larger
# than MSS (and there is a memory penalty for the message
# copy).

因此,是的,您应该能够将文件对象作为数据参数传入。

我认为http动词无关紧要。如果有数据要随请求一起发送,则此时通过读取文件来填充网络缓冲区。我只想通过写信来填补它。我想对于web请求,我只是想知道在pythonI中是否有可能。对不起,我不理解-您建议我直接与套接字交互以发送数据吗?send/sendall基本上与我想要的写接口相同。我正在寻找一个库,我可以用写接口发送数据,而不是用read方法传递数据,这是我在python中遇到的所有库的工作方式。这并没有真正回答我的问题。我没有否决投票,虽然我认为http动词无关紧要。如果有数据要随请求一起发送,则此时通过读取文件来填充网络缓冲区。我只想通过写信来填补它。我想对于web请求,我只是想知道在pythonI中是否有可能。对不起,我不理解-您建议我直接与套接字交互以发送数据吗?send/sendall基本上与我想要的写接口相同。我正在寻找一个库,我可以用写接口发送数据,而不是用read方法传递数据,这是我在python中遇到的所有库的工作方式。这并没有真正回答我的问题。但我并没有否决投票