web接口——上传xlsx文件服务器处理后返回xlsx下载
wils
创作者俱乐部成员
今天群里有朋友问,能否做个网络接口,用户上传xlsx文件,服务端处理后返回xlsx文件
用py试了一下:
import pandas as pd
from io import BytesIO
from flask import Flask, request, render_template_string, send_file
app = Flask(__name__)
@app.route("/", methods=['GET', 'POST'])
def upload_file():
if request.method == 'GET':
return render_template_string('''<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form method="POST" action="." enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
</body>
</html>''')
elif request.method == 'POST':
if 'file' not in request.files:
return '未选中文件'
file = request.files['file']
if file.filename == '':
return '文件名为空'
file_bytes = file.read()
df = pd.read_excel(BytesIO(file_bytes))
df = df.sort_values(by='x', ascending=False, ignore_index=True)
ret = BytesIO()
with pd.ExcelWriter(ret, engine='openpyxl') as w:
df.to_excel(w, index=False)
ret.seek(0)
return send_file(ret,
mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
as_attachment=True,
download_name='data.xlsx')
if __name__ == '__main__':
app.run(debug=True)写的比较粗糙,大概就是:
收到GET请求时返回一个网页,上面只有一个文件选择按钮,选择xlsx后点击上传就发送POST请求
收到POST请求时服务端通过pandas打开xlsx,处理后(这里是按照x这一列降序),这里忘记检查上传的文件第一张表是否有x这一列,返回xlsx给用户下载
创作者俱乐部成员