美文网首页
Flask处理文件

Flask处理文件

作者: 鹊南飞_ | 来源:发表于2020-09-22 15:29 被阅读0次

1. 生成文件

我生成的是excel文件,所以我使用openpyxl来生成excel文件

1. 安装openpyxl
pip install openpyxl
2. 简单的示例
import openpyxl
import os

# 文件保存根目录
FILE_PATH = '/home/kun/test'


def create_file(name):
    # 实例化
    wb = openpyxl.Workbook()
    # 激活worksheet
    ws = wb.active
    # 修改worksheet工作表名字
    ws.title = "测试数据"
    for i in range(50):
        # 使用append添加数据
        ws.append([i, name])
    # 保存文件,指定保存目录以及文件名字
    wb.save(os.path.join(FILE_PATH, '{}.xlsx'.format(name)))


if __name__ == '__main__':
    create_file('测试')

运行后会生成对应文件, 如下图


生成的文件
3. 说明
  • 实例化
    wb = openpyxl.Workbook()
  • 激活worksheet
    ws = wb.active
  • 修改worksheet工作表名字
    ws.title = "xxxx"
  • 使用append添加数据
    ws.append([xx, xx, xx])
  • 保存文件,指定保存目录以及文件名字
    wb.save(xxxxxx/yyyy.xlsx)

2. 返回文件

1. flask文件示例
import os

from urllib.parse import quote
from flask import Flask, send_file, request
from flask_cors import CORS

app = Flask(__name__)
CORS(app, supports_credentials=True)

# 文件保存根目录
FILE_PATH = '/home/kun/test'

def create_file(name):
    # 实例化
    wb = openpyxl.Workbook()
    # 激活worksheet
    ws = wb.active
    # 修改worksheet工作表名字
    ws.title = "测试数据"
    for i in range(50):
        # 使用append添加数据
        ws.append([i, name])
    # 保存文件,指定保存目录以及文件名字
    wb.save(os.path.join(FILE_PATH, '{}.xlsx'.format(name)))


@app.route('/upload')
def upload_file():
    # 接受参数
    name = request.args.get('name')
    # 使用openpyxl生成文件
    create_file(name)
    # 生成后的文件名字
    full_name = '{}.xlsx'.format(name)
    # 防止中文文件乱码,原本的attachment_filename是没有办法用中文名的
    filename = quote(full_name)
    # 使用send_file
    rv = send_file(os.path.join(FILE_PATH, full_name), as_attachment=True, attachment_filename=filename)
    # 修改请求头
    rv.headers['Content-Disposition'] += "; filename*=utf-8''{}".format(filename)
    # 返回文件对象
    return rv


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5010, debug=True)

2. 说明
  • 接受参数
    name = request.args.get('name')
  • 使用openpyxl生成文件
    create_file(name)
  • 生成后的文件名字
    full_name = '{}.xlsx'.format(name)
  • 防止中文文件乱码,原本的attachment_filename是没有办法用中文名的
    filename = quote(full_name)
  • 使用send_file
    rv = send_file(xxxx, as_attachment=True, attachment_filename=filename)
  • 修改请求头
    rv.headers['Content-Disposition'] += "; filename*=utf-8''{}".format(filename)

3. 接收文件

1. flask示例文件
import os
from urllib.parse import quote
from flask import Flask, send_file, request, jsonify
from flask_cors import CORS

app = Flask(__name__)
CORS(app, supports_credentials=True)


@app.route('/receive')
def receive_file():
    # file就是接收file对象
    file = request.files.get('file')
    # file.filename 获取文件名字
    filename = file.filename
    return jsonify({'filename': filename})


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5010, debug=True)

2. 说明
  • 接收file对象
    file = request.files.get('file')
  • 获取文件名字
    filename = file.filename

4 .完整文件代码

import os
import openpyxl
from urllib.parse import quote
from flask import Flask, send_file, request, jsonify
from flask_cors import CORS

app = Flask(__name__)
CORS(app, supports_credentials=True)

FILE_PATH = '/home/kun/test'


def create_file(name):
    # 实例化
    wb = openpyxl.Workbook()
    # 激活worksheet
    ws = wb.active
    # 修改worksheet工作表名字
    ws.title = "测试数据"
    for i in range(50):
        # 使用append添加数据
        ws.append([i, name])
    # 保存文件,指定保存目录以及文件名字
    wb.save(os.path.join(FILE_PATH, '{}.xlsx'.format(name)))


@app.route('/upload')
def upload_file():
    # 接受参数
    name = request.args.get('name')
    # 使用openpyxl生成文件
    create_file(name)
    # 生成后的文件名字
    full_name = '{}.xlsx'.format(name)
    # 防止中文文件乱码,原本的attachment_filename是没有办法用中文名的
    filename = quote(full_name)
    # 使用send_file
    rv = send_file(os.path.join(FILE_PATH, full_name), as_attachment=True, attachment_filename=filename)
    # 修改请求头
    rv.headers['Content-Disposition'] += "; filename*=utf-8''{}".format(filename)
    # 返回文件对象
    return rv


@app.route('/receive')
def receive_file():
    # file就是接收的file对象
    file = request.files.get('file')
    # file.filename 获取文件名字
    filename = file.filename
    return jsonify({'filename': filename})


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5010, debug=True)

相关文章

网友评论

      本文标题:Flask处理文件

      本文链接:https://www.haomeiwen.com/subject/zmywyktx.html