Flask處理文件

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)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。