# -*- coding: utf-8 -*-
# ====> 上传文件 <==== #
import os
from flask import Flask, jsonify, request, send_file
from flask_cors import CORS
import logging
# 创建一个logger
lg = logging.getLogger('logger')
app = Flask(__name__)
# 设置文件上传大小限制为500MB
app.config['MAX_CONTENT_LENGTH'] = 500 * 1024 * 1024
CORS(app)
file_save_folder = os.getcwd() + os.sep + 'files'
os.makedirs(file_save_folder, exist_ok=True)
f_debug = False
f_port = 7001
def make_api_response_failed(data=None):
rs = {
'success': False,
'msg': '',
'code': 400,
'data': data
}
return jsonify(rs)
def make_api_response(data=None):
rs = {
'success': True,
'msg': None,
'code': 200,
'data': data
}
return jsonify(rs)
@app.route('/api/upload', methods=['POST'])
def upload():
try:
if 'file' not in request.files:
return make_api_response_failed(msg=f'请求中没有文件部分')
file = request.files['file']
if file.filename == '' or not file:
return make_api_response_failed(msg=f'未选择文件')
filename = file.filename
filepath = os.path.join(file_save_folder, filename)
file.save(filepath)
url = f'http://127.0.0.1:{f_port}/api/download/{filename}'
res = {
'url': url,
'file_name': filename,
'filepath': filepath
}
return make_api_response(res)
except Exception:
lg.error("文件上传出错: ", exc_info=True)
return make_api_response_failed(msg=f'文件上传出错')
@app.route('/api/download/<string:filename>', methods=['GET'])
def download(filename):
try:
return send_file(os.path.join(file_save_folder, filename), as_attachment=False)
except Exception:
lg.error("文件下载出错: ", exc_info=True)
return make_api_response_failed(msg=f'文件下载出错')
if __name__ == '__main__':
lg.info(f'开始启动文件管理服务,端口为:{f_port}, 是否开启debug:{f_debug}')
app.run(host='0.0.0.0', port=f_port, debug=f_debug)
前端代码参考: 前端技术(28) : 拖拽、粘贴和点击浏览文件上传-CSDN博客