lydhr
V2EX  ›  Flask

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

  •  
  •   lydhr · Dec 4, 2015 · 6232 views
    This topic created in 3813 days ago, the information mentioned may be changed or developed.
    • 想写一个 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 replies    2015-12-05 02:59:55 +08:00
    loading
        1
    loading  
       Dec 4, 2015 via Android
    如果下载不需要权限控制,建议 redirect 到 nginx 的静态文件夹。

    因为 flask 这种是阻塞的方式,如果只有一个线程,有人下载,你的服务将在下载全程不可用。
    loading
        2
    loading  
       Dec 4, 2015 via Android
    之前我问过一个相关的。
    http://v2ex.com/t/197801#reply4
    C0VN
        3
    C0VN  
       Dec 4, 2015
    确实下载文件不太应该用 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  
       Dec 5, 2015
    flask 可以配合 nginx 的内部路由 很好的实现文件下载功能
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3610 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 10:39 · PVG 18:39 · LAX 03:39 · JFK 06:39
    ♥ Do have faith in what you're doing.