使用file.write接口上传文件

时间:2013-03-05 17:44:59

标签: python

我从来没有在Python中看过这个,如果有什么东西允许你用写接口发送文件(例如HTTP PUT或POST),我很感兴趣?我只见过你传递文件名或file对象的读取界面(urllib,请求等)

当然,我可能从未见过这个有充分理由,我也有兴趣知道。

1 个答案:

答案 0 :(得分:-1)

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

file interface   http
------------------------
read             GET
                 HEAD
------------------------
write            POST
                 PUT
                 PATCH
------------------------
?                DELETE
                 OPTIONS

如您所见,文件接口与任何RESTful接口所需的HTTP谓词集之间没有明确的映射。当然,您可能会共同破解仅使用GET(读取)和POST(写入)的实现,但这将破坏您需要扩展它以支持任何其他HTTP谓词的第二个实现。< / p>

根据评论进行修改:

我自己没有尝试过,但似乎内心深处(http / client.py),如果数据实现read,它会读取它:

        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).

所以是的,你应该能够传递一个文件对象作为data参数。