python接口获取上传的文件,动态生成文件并下载

本文详细介绍了如何使用Python处理文件上传、下载及生成txt文件的过程。包括从请求中获取上传的Excel文件,读取并处理文件内容,以及根据模板生成并下载txt文件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一直在写接收JSON参数的接口,这次写从数据的参数,记录下

1.接收上传的文件

user_id = request.form.get("user_id", "") # text参数获取

file = request.files['files'] # 文件参数获取
sheet = pd.read_excel(file,header=0) 
field=sheet.columns # 获取表头
for i in range(0,len(sheet)):
    body={k:sheet[k][i] for k in field} # 获取表格内容

2.返回文件,提供下载

from xlrd import open_workbook
from xlutils.copy import copy

from flask import Response
from os import path



@api.route("/download", methods=["POST"])
def download():
    try:

        names = ["TITLE","AUTHOR","CONTENT"]

        filepath = path.join(FOLDER, r'model/base.xls')

        if not os.path.exists(filepath):

            wbk = xlwt.Workbook()
            sheet = wbk.add_sheet('sheet 1', cell_overwrite_ok=True)

            for index in range(0, len(names)):
                sheet.write(0, index, name[index])

            wbk.save(filepath)
        else:
            rb = open_workbook(filepath)
            cols = rb.sheet_by_index(0).ncols
            wb = copy(rb)
            ws = wb.get_sheet(0)

            for index in range(0, len(names)):
                ws.write(0, index, names[index])
            if len(names) < cols:
                for index in range(len(names), cols):
                    ws.write(0, index, "")
            wb.save(filepath)
        response = Response(file_iterator(filepath))
        response.headers['Content-Type'] = 'application/octet-stream'
        response.headers["Content-Disposition"] = 'attachment;filename="{}"'.format(filepath)
        return response
    except Exception as e:
        return "服务器发生错误"


def file_iterator(file_path, chunk_size=512):
    """
        文件读取迭代器
    :param file_path:文件路径
    :param chunk_size: 每次读取流大小
    :return:
    """
    with open(file_path, 'rb') as target_file:
        while True:
            chunk = target_file.read(chunk_size)
            if chunk:
                yield chunk
            else:
                break

3.根据模板文件生成txt文件并下载

from flask import send_from_directory
from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader('data'))
template = env.get_template('base_txt.j2')
content = template.render(name="test",job="teacher")
fobj = open(r'data/model/{0}.txt'.format("111"), 'w', encoding='utf-8')
fobj.write(content)
fobj.close()
return send_from_directory(os.path.dirname(os.path.abspath(fobj.name)),
                                   os.path.basename(fobj.name), as_attachment=True)

模板文件放在data/templates/base_txt.j2

名字是{{name}},职业是{{job}}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值