当前位置:   article > 正文

React+Flask实现压缩包导出_前端react 接口导出zip文件

前端react 接口导出zip文件

项目背景:前后端分离,前端采用React,后端采用Flask,压缩包存在于后端路径下

1、按钮设置点击事件,点击后调用handleFileExport方法

  1. <Button
  2. variant="contained"
  3. color="primary"
  4. onClick={handleFileExport}
  5. fullWidth
  6. >
  7. 导出文件
  8. </Button>

2、handleFileExport方法

  1. const handleFileExport = async () => {
  2. // 模拟导出文件的过程
  3. setTimeout(async () => {
  4. const res = await fetch('http://127.0.0.1:5000/download/' + encodeURIComponent(filename), {
  5. headers: {
  6. 'Accept': 'application/zip', // 设置适当的Accept
  7. },
  8. });
  9. const url = res.url;
  10. // 创建一个虚拟的下载链接并触发点击事件
  11. const a = document.createElement('a');
  12. a.href = url;
  13. a.style.display = 'none'; // 隐藏此超链接
  14. document.body.appendChild(a);
  15. a.click();
  16. }, 3000); // 模拟3秒的导出时间
  17. };

需要将http://127.0.0.1:5000/download/设置为自己的后端接口,filename为要导出的压缩包的名称,比如为demo.zip,注意一定要设置headers.

3、后端设置

  1. from blueprints.dataApi.controllers import DataController
  2. @bp.route('download/<filename>', methods=['GET'])
  3. def download(filename):
  4. try:
  5. data = DataController._download(filename)
  6. return data
  7. except Exception as e:
  8. return ArgumentExceptionResponse(msg=f'{e}')

点击按钮后,调用handleFileExport ,接下来会调用后端接口,继续调用DataController中的_download方法,_download方法如下:

4、_download方法:

  1. from flask import send_file
  2. @staticmethod
  3. def _download():
  4. folder_path = '../output/demo.zip'
  5. return send_file(folder_path, as_attachment=True)

../output/demo.zip为压缩包,../output是压缩包相对于此_download方法所在文件(controllers.py)的相对路径,比如_download方法写在了controllers.py中,路径为blueprints/dataApi/controllers.py。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/710513
推荐阅读
相关标签
  

闽ICP备14008679号