处理bottle.py中的分块上传

时间:2015-02-25 22:22:59

标签: python python-requests bottle

我在使用bottle.py从服务器端处理分块上传时遇到了一些麻烦。我正在使用python请求和request-toolbelt来进行HTTP和上传进度跟踪。我打算使用该脚本上传大文件,因此需要进行分块上传并避免读取内存中的文件。 我略微调整了requests-toolbelt文档中显示的示例,虽然我可以看到上传进度数据,但我在服务器端获得了0大小的文件。这是我正在使用的代码。

    #uploader.py
def create_callback(encoder):
    encoder_length = len(encoder)
    prog_bar = Bar(expected_size=encoder_length, filled_char='=')

    def callback(monitor):
        prog_bar.show(monitor.bytes_read)

    return callback


if __name__ == "__main__":
     m = MultipartEncoder(
        fields={'testfile': ('test.txt', open('test.txt', 'rb'), 'text/plain')}
        )

     callback = create_callback(m)

     m = MultipartEncoderMonitor(m, callback)

     r = requests.post('http://127.0.0.1/upload', data=m,
                      headers={'Content-Type': m.content_type})

     print r.status_code #prints 200

#server.py

@post("/upload")
def handle_upload():
    print len(request.POST['testfile'].file.read()) #i always get zero



if __name__ == "__main__":
    run(server='cherrypy', port="8080") # I still get zero even without the cherrypy server

我想我已按照说明操作了,但我无法弄清楚我在哪里错过了这一点。

[编辑]

我已查看this post,其中介绍了如何修补文件 并依赖于标题中的Content-Range字段,但是当我打印出请求标题时,我只能看到内容长度

0 个答案:

没有答案