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();
  • 相关阅读:
    codeforces 713A A. Sonya and Queries(状态压缩)
    2016大连网赛
    hdu-5834 Magic boy Bi Luo with his excited tree(树形dp)
    codeforces gym-101078
    ifrog-1028 Bob and Alice are playing numbers(trie树)
    codeforces 477B B. Dreamoon and Sets(构造)
    codeforces 477A A. Dreamoon and Sums(数学)
    三角形划分区域
    当总统
    Friends number
  • 原文地址:https://www.cnblogs.com/cherylgi/p/13325326.html
Copyright © 2011-2022 走看看