上传下载文件

import io
import os
from urllib.parse import quote

from flask import Flask, request, make_response
import pandas as pd

app = Flask(__name__)


@app.route('/')
def index():
    return 'Hello World!'


@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
    file = request.files['file']        # 文件相关信息
    form = request.form                 # 附带提交的表单相关信息

    # # 读取(表格)文件流
    # df = pd.read_excel(file)          # 需要对应格式

    filename = file.filename
    file_path = os.path.split(os.getcwd())[0] + f'/{filename}'
    file.save(file_path)                # 存储文件至本地
    return 'success'


@app.route('/download', methods=['GET', 'POST'])
def download_file():
    # 转换为文件流
    bio = io.BytesIO()
    writer = pd.ExcelWriter(bio, engine='openpyxl')     # 还依赖了openpyxl
    df = pd.DataFrame()                 # 空测试文件
    df.to_excel(writer, sheet_name='Sheet1')
    writer.save()
    bio.seek(0)
    file_output = bio.getvalue()

    resp = make_response(file_output)
    file_name = 'excel.xlsx'                # 文件名
    basename = os.path.basename(file_name)
    resp.headers["Content-Disposition"] = f"attachment; filename*=utf-8''{quote(basename.encode('utf-8'))}"
    # resp.headers["Content-Type"] = "text/csv"   # .csv
    # resp.headers["Content-Type"] = "application/vnd.ms-excel"   # .xls
    resp.headers["Content-Type"] = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"  # .xlsx

    return resp


if __name__ == '__main__':
    app.run(debug=True)
posted @ 2022-04-28 17:58  F___Q  阅读(35)  评论(0)    收藏  举报