如何将Flask+jQuery Datatables导出的CSV存储到Windows服务器指定路径
实现方案
jQuery Datatables 自带的 excelHtml5 是纯前端导出能力,只能将文件下载到用户本地,无法直接写入服务器路径,你需要调整为「前端传递筛选后的数据/筛选参数到后端,由后端生成文件保存到指定路径」的方案,具体实现如下:
1. 前端Datatables配置修改
替换原有导出按钮配置,自定义点击事件,获取当前筛选后的表格数据提交到Flask后端:
buttons: [ { text: 'Export Data', action: function ( e, dt, node, config ) { // 获取当前筛选条件下的全量表格数据 let filteredData = dt.rows({ search: 'applied' }).data().toArray(); // 获取表头内容,用于生成CSV表头 let headers = dt.columns().header().toArray().map(item => item.textContent.trim()); // 提交数据到后端接口 $.ajax({ url: '/save_export_file', method: 'POST', contentType: 'application/json', data: JSON.stringify({ headers: headers, data: filteredData, filename: 'Data.csv' }), success: function(res) { res.status === 'success' ? alert('文件已保存到服务器') : alert('保存失败:' + res.msg); }, error: () => alert('请求异常,请重试') }) } } ]
2. Flask后端接口实现
新增接口接收前端数据,生成CSV文件写入服务器指定路径,注意确认运行Flask服务的账户对目标路径有写入权限:
from flask import Flask, request, jsonify import csv import os from datetime import datetime app = Flask(__name__) # 配置服务器文件保存路径,Windows共享路径请使用原始字符串避免转义问题 SAVE_PATH = r'\\server_name\downloads' @app.route('/save_export_file', methods=['POST']) def save_export_file(): try: req = request.get_json() headers = req.get('headers', []) table_data = req.get('data', []) // 未指定文件名则按时间戳自动生成 file_name = req.get('filename', f'export_{datetime.now().strftime("%Y%m%d%H%M%S")}.csv') full_save_path = os.path.join(SAVE_PATH, file_name) // 写入CSV文件 with open(full_save_path, 'w', newline='', encoding='utf-8-sig') as f: writer = csv.writer(f) if headers: writer.writerow(headers) for row in table_data: writer.writerow(row) return jsonify({'status': 'success', 'msg': '保存成功'}) except Exception as e: return jsonify({'status': 'error', 'msg': str(e)}), 500
注意事项
- 如果导出数据量较大,建议不要前端传递全量数据,改为传递Datatables的搜索、排序、筛选参数到后端,由后端重新执行对应SQL查询生成文件,避免请求体积过大超时。
- 若需要生成xlsx格式的Excel文件,可以使用openpyxl库替换上述csv库的写入逻辑。
- 目标路径如果是Windows共享文件夹,需要提前配置好对应账户的共享权限和NTFS写入权限。
内容的提问来源于stack exchange,提问作者dfahsjdahfsudaf
相关产品推荐
相关产品推荐

