web接口——上传xlsx文件服务器处理后返回xlsx下载

wils
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给用户下载

海南省
浏览 214
收藏
5
分享
5 +1
3
+1
全部评论 3
 
南京的天
哪个群里的提问呢,我也想加入该群学习
· 山西省
回复
wils
wils

创作者俱乐部成员

就是wps社区活动群,我也不知道怎么邀请,大概就是参加一些置顶活动,找官方的号问一下就能加吧,其实提问的也不多
· 海南省
回复