41 lines
1.5 KiB
Python
41 lines
1.5 KiB
Python
|
|
"""
|
||
|
|
文件下载 API
|
||
|
|
"""
|
||
|
|
import os
|
||
|
|
from flask import request, jsonify, send_from_directory
|
||
|
|
from . import download_bp
|
||
|
|
|
||
|
|
|
||
|
|
@download_bp.route('/download', methods=['GET'])
|
||
|
|
def download_file():
|
||
|
|
"""下载文件"""
|
||
|
|
try:
|
||
|
|
file_path = request.args.get('path')
|
||
|
|
print(f"[下载] 请求路径:{file_path}")
|
||
|
|
|
||
|
|
if not file_path:
|
||
|
|
return jsonify({'success': False, 'message': '文件路径不能为空'}), 400
|
||
|
|
|
||
|
|
# 安全检查:确保路径在 public 目录下
|
||
|
|
if not file_path.startswith('/reports/'):
|
||
|
|
return jsonify({'success': False, 'message': '无效的文件路径'}), 400
|
||
|
|
|
||
|
|
filename = file_path.replace('/reports/', '')
|
||
|
|
# 使用绝对路径
|
||
|
|
reports_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '..', 'public', 'reports')
|
||
|
|
|
||
|
|
print(f"[下载] 文件目录:{reports_dir}")
|
||
|
|
print(f"[下载] 文件名:{filename}")
|
||
|
|
print(f"[下载] 文件是否存在:{os.path.exists(os.path.join(reports_dir, filename))}")
|
||
|
|
|
||
|
|
# 列出目录中的所有文件
|
||
|
|
if os.path.exists(reports_dir):
|
||
|
|
print(f"[下载] 目录中的文件:{os.listdir(reports_dir)}")
|
||
|
|
|
||
|
|
return send_from_directory(reports_dir, filename, as_attachment=True)
|
||
|
|
except Exception as e:
|
||
|
|
print(f"[下载] 错误:{str(e)}")
|
||
|
|
import traceback
|
||
|
|
traceback.print_exc()
|
||
|
|
return jsonify({'success': False, 'message': str(e)}), 500
|