Web API前后端分离在前端如何实现文件下载?

我后端使用的是token进行状态管理,想实现用户登录后下载文件(类似网盘的功能) 。
目前文件返回使用的是 send_from_directory函数,前端能用过ajax获取,但不知道怎么才能实现类似点击a标签后下载到本机的效果。希望各位大大帮忙看看这个问题

代码如下:

# 省略众多导包
from flask_restful import Api, Resource

cloud_bp = Blueprint('cloud', __name__)
api = Api(cloud_bp)

class DownloadFileView(Resource):
    decorators = [auth.login_required]

    def get(self, path):
        try:
            file = DownloadFile(g.username, path)
            file_path, filename = file.get_file()
            # return send_from_directory(file_path, filename)
            return send_from_directory(file_path, filename, as_attachment=True)
        except ValueError as e:
            current_app.logger.info(e)
            return make_res(code=-1, message=str(e))
        except Exception as e:
            current_app.logger.error(e)
            return make_res(code=-1, message=str(e))

api.add_resource(DownloadFileView, "/download/<path:path>")

参考这个回答

原理是ajax用请求到的文件流动态创建一个a标签并自动点击,用户侧就会弹出一个下载询问窗,就好像是点击链接下载的一样。

1 Like

已解决,感谢! :+1: