flask 如何通过 http 请求下载一个文件 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lydhr
V2EX    Flask

flask 如何通过 http 请求下载一个文件

  •  
  •   lydhr 2015-12-04 17:59:56 +08:00 6024 次点击
    这是一个创建于 3665 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 想写一个 ios 端通过 http 请求上传一个文件,然后处理后在下载下来
    • 服务器端用的 flask ,已经调通了上传,如何用 flask 处理下载文件的请求呢?
    • 查了 doc 的一个 send_from_directory 方法但是跑不起来
      上传文件代码

      @app.route('/saveFile', methods=['POST']) def saveObjZip(): try: # We will save the zip file to disk. myfile = flask.request.files['myFile'] filename_ = str(datetime.datetime.now()).replace(' ', '_') + \ werkzeug.secure_filename(myfile.filename) filename = os.path.join(UPLOAD_FOLDER, filename_) myfile.save(filename) logging.info('Saving to %s.', filename) except Exception as err: logging.info('Uploaded file open error: %s', err) return err; 
    4 条回复    2015-12-05 02:59:55 +08:00
    loading
        1
    loading  
       2015-12-04 18:19:31 +08:00 via Android
    如果下载不需要权限控制,建议 redirect 到 nginx 的静态文件夹。

    因为 flask 这种是阻塞的方式,如果只有一个线程,有人下载,你的服务将在下载全程不可用。
    loading
        2
    loading  
       2015-12-04 18:27:46 +08:00 via Android
    之前我问过一个相关的。
    http://v2ex.com/t/197801#reply4
    C0VN
        3
    C0VN  
       2015-12-04 21:48:00 +08:00
    确实下载文件不太应该用 web 框架来处理,直接交给 web server 当作静态文件处理。


    你说的不知道我理解对没有,例如就是返回数据 A.txt 文本文件内容,让浏览器以下载文件来处理,而不是直接给你在浏览器中打开了。

    需要在返回的 http header 中添加"Content-Disposition"

    你看一下这里 https://github.com/xavierskip/hupu_Album_Downloader/blob/master/web/index.py#L128
    ericls
        4
    ericls  
       2015-12-05 02:59:55 +08:00
    flask 可以配合 nginx 的内部路由 很好的实现文件下载功能
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3060 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 12:31 PVG 20:31 LAX 04:31 JFK 07:31
    Do have faith in what you're doing.
    ubao msn 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