python3:flask实现前端动态选择目录下载文件

前置知识

在内存中读写

BytesIO()

操作二进制数据,就需要使用BytesIO。
BytesIO实现了在内存中读写bytes,我们创建一个BytesIO,然后写入一些bytes:
写入的不是str,而是经过UTF-8编码的bytes

from io import BytesIO

f = BytesIO()
f.write('中文'.encode('utf-8'))
print(f.getvalue())
'''
b'\xe4\xb8\xad\xe6\x96\x87'
'''

StringIO()

StringIO顾名思义就是在内存中读写str

要把str写入StringIO,我们需要先创建一个StringIO,然后,像文件一样写入即可:

from io import StringIO

f = StringIO()
f.write('hello')
f.write(' ')
f.write('world!')
print(f.getvalue())

'''
hello world!
'''

getvalue()方法用于获得写入后的str。

要读取StringIO,也可以用一个str初始化StringIO,然后,像读文件一样读取:

from io import StringIO

f = StringIO('Hello!\nHi!\nGoodbye!')
while True:
    s = f.readline()
    if s == '':
        break
    print(s.strip())

'''
Hello!
Hi!
Goodbye!
'''

flask自带的make_response

make_response很强大,下载一个文件,需要在response的headers里边添加一些信息,比如文件的类型,文件的名字,是否以附件形式添加,这3个是比较关键的信息

代码实现

下面的代码供参考

from flask import Flask, make_response
from io import BytesIO

server = Flask(__name__)


@server.route("/download", methods=['post'])
def downloadFile():
	# 操作二进制数据
    output = BytesIO()
    output.write('xxx'.encode('utf-8'))
    # output.getvalue(): 文件的数据流
    response = make_response(output.getvalue())
    # 下载文件
    response.headers["Cache-Control"] = "no-cache"
    
    # 文件是excel类型的,后面的值可以设置为mime_type
    response.headers['Content-Type'] = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
    # 文件名
    response.headers["Content-Disposition"] = "attachment;filename=receiptDataAnalyze.xlsx"

    return response

if __name__ == "__main__":
    server.run(host='127.0.0.1', port=88)

如果是中文的文件名需要进行转码

utf_filename=quote(basename.encode('utf-8'))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

?abc!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值