• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

python3flask实现前端动态选择目录下载文件

武飞扬头像
?abc!
帮助1

前置知识

在内存中读写

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'))

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfifhc
系列文章
更多 icon
同类精品
更多 icon
继续加载