zoukankan      html  css  js  c++  java
  • flask_restful实现文件下载功能

    环境:前后端完全分离,后端flask_restful,前端vue

    from flask_restful import reqparse, Resource
    from flask import send_from_directory,send_file,safe_join
    from werkzeug.utils import secure_filename
    
    class DownloadTemplates(Resource):
        def get(self):
            parser = reqparse.RequestParser(trim=True)
            parser.add_argument('filename', required=True, nullable=False, location=['args'])
            args = parser.parse_args()
            filename = args['filename']
            path = handle_manage.template_dir
            response = send_from_directory(path, filename, as_attachment=True)
            return response
    
    
    注意:这种做法有时会报错404,提示找不到url
    genericpath.py 如果系统安装了这个组件的话:
     
    会替换系统自带的path功能,导致,path失效了。最终会找不到文件。
     
    代码只有这样简短的几句话而已。就是这个os.path.isfile会有问题。所以,放在uploaded_file中来完成这个动作,就可以了
    
    class DownloadTemplates(Resource):
        def get(self):
            parser = reqparse.RequestParser(trim=True)
            parser.add_argument('filename', required=True, nullable=False, location=['args'])
            args = parser.parse_args()
            UPLOAD_FOLDERS = handle_manage.template_dir
            filename = args['filename']
            return send_file(safe_join(UPLOAD_FOLDERS, secure_filename(filename)), as_attachment=True)

    前端

    this.currentNode.path 为文件绝对路径
    //方法一
    //response.data + '/' + download_url 是绝对地址
    window.open(response.data + '/' + download_url, '_blank');
    //方法二
    let a = document.createElement('a')
    a.href = response.data + '/' + download_url
    a.click();
  • 相关阅读:
    【JAVA】java 堆溢出分析
    【数据结构】链表的基本学习 实现
    【其他】博客园自定义样式指南
    【JAVA】一些好用的开源java类库
    【Shell】Shell 常用命令
    【Spring】Spring Boot 要点整理
    【数据库】Mysql 连接相关
    【Linux】Shell 参数解析
    Erlang 中类型转换
    erlang 中 maps 练习
  • 原文地址:https://www.cnblogs.com/cherylgi/p/13325326.html
Copyright © 2011-2022 走看看