Tornado 如何拿到传输的文件流 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhze93
V2EX    Tornado

Tornado 如何拿到传输的文件流

  •  
  •   zhze93 2019-04-25 14:58:13 +08:00 25192 次点击
    这是一个创建于 2359 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一个大文件
    我在 client 通过 requests 库来进行传输

    with open(path_file, "rb") as f: res = requests.post(url, data=f, timeout=600) 

    我在 server 端,从 tornado_request 中该如何接收这个文件流并保存下来呢。
    谢谢各位的不吝赐教。

    第 1 条附言    2019-04-25 17:18:06 +08:00
    没有采用标准上传方式是因为这个文件过大了,内存扛不住,就用了 requests 的流式传输。
    但是有个问题,我这样流式传输,我的 nginx upload 并没有反应。如果采用 form-data 的方式,nginx 是 OK 的。
    所以只能自己在 server 端去拿到文件流保存下来。
    8 条回复    2019-04-25 18:09:08 +08:00
    sujin190
        1
    sujin190  
       2019-04-25 15:45:01 +08:00
    RequestHandler 上有 request 属性,request 这个有 body 原始字节属性,和 files 属性吧,files 就是已经被解析成 file 对象,body 则必须你自己解析了

    再说调试下就知道了啊,python 用 pycharm 啥的还是调试很方便的
    zhze93
        2
    zhze93  
    OP
       2019-04-25 16:10:13 +08:00
    @sujin190
    调试过了。request body 接收到后是字符串,这里该怎么解析。
    之前文件不大,传输的都是 form-data 格式,服务端我就直接二进制读写就行了。
    shuax
        3
    shuax  
       2019-04-25 16:16:41 +08:00
    self.request.files
    kidlj
        4
    kidlj  
       2019-04-25 16:17:31 +08:00
    几年前学习 Python web frameworks,flask 和 Django 都不太喜欢,看到 Tornado 的 api 一下子就喜欢了。可是当时不太懂 coroutine 和异步编程,觉得难以入门。后来学习了 Node.js 和 Express,也是很喜欢,现在回过头来看,Tornado 就相当于 Python 的 Express 吧。
    zhze93
        5
    zhze93  
    OP
       2019-04-25 16:20:23 +08:00
    @shuax
    调试的时候,这里是空的 dict
    shuax
        6
    shuax      2019-04-25 16:30:29 +08:00
    @zhze93 哦,失误,你这个根本就不是标准的上传文件流程
    sujin190
        7
    sujin190  
       2019-04-25 16:36:50 +08:00
    @zhze93 #2 正常 request.files 肯定是解析好的,requests.post 上传文件不是这么写的吧,你这是把文件内容读出来整个放到 body 里了,所以服务端 request.body 就是文件内容吧,直接写入文件就行了
    wupeaking
        8
    wupeaking  
       2019-04-25 18:09:08 +08:00
    这个问题很多年前我也遇到过,request 一次是把 http 请求的数据全部读取完后返回给你的。 如果你是请求大文件这种一下就把内存干光了。 后来我是重写了 tornado 的 httpclient,每次读取一部分数据然后异步回调。 现在我转到 Go 了, 具体实现记不清了。 你要是需要我翻一翻以前的代码贴给你。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3025 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 11:17 PVG 19:17 LAX 04:17 JFK 07:17
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86