Python生成并下载文件后端代码实例

  • Post category:Python

Python生成并下载文件的后端代码实例可以分为以下几步:

1. 引入必要的库和模块

import os
from flask import Flask, request, make_response, send_from_directory

在这个示例中,我们使用了 Flask 和 os 两个 Python 模块。其中 Flask 用于创建 Web 应用,os 用于操作文件系统。

2. 创建 Flask 应用实例

在这一步中,我们需要创建一个 Flask 应用实例。

app = Flask(__name__)

这创建一个名为 app 的 Flask 应用实例。

3. 定义路由

在这个示例中,我们需要定义两个路由,一个用于生成文件,一个用于下载文件。生成文件的路由为 /generate_file,下载文件的路由为 /download/,其中 是动态传入的参数,表示要下载的文件名。

@app.route('/generate_file')
def generate_file():
    # 生成文件的代码

@app.route('/download/<file_name>')
def download(file_name):
    # 下载文件的代码

4. 生成文件

在这个示例中,我们使用内置的 open() 函数创建并写入一个名为 example.txt 的文件。

@app.route('/generate_file')
def generate_file():
    file_path = os.path.join(app.root_path, 'example.txt')

    with open(file_path, 'w') as f:
        f.write('This is an example file.')

    return 'File generated successfully!'

在这个示例中,我们使用了 os.path.join() 函数来获取文件路径,然后使用了 with open() as f 语句来创建文件并写入字符串。

5. 下载文件

在这个示例中,我们使用 Flask 内置的 send_from_directory() 函数来下载文件。

@app.route('/download/<file_name>')
def download(file_name):
    file_path = os.path.join(app.root_path, file_name)

    if not os.path.isfile(file_path):
        return 'File not found'

    response = make_response(send_from_directory(app.root_path, file_name, as_attachment=True))
    response.headers['Content-Disposition'] = 'attachment; filename={}'.format(file_name)
    response.headers['Content-Type'] = 'application/octet-stream'

    return response

首先,我们使用 os.path.join() 函数来获取文件路径。然后,我们使用 os.path.isfile() 函数判断文件是否存在,如果不存在则返回错误信息。如果文件存在,我们使用 make_response() 函数创建响应对象,然后使用 send_from_directory() 函数将文件作为附件下载。最后,我们使用 response.headers[] 添加 Content-Disposition 和 Content-Type 头部信息,告诉浏览器以下载文件的方式处理响应。

示例1

以下是访问 /generate_file 和 /download/example.txt 后的效果:

访问 /generate_file 后,返回字符串 “File generate successfully!”。

访问 /download/example.txt 后,会自动下载名为 example.txt 的文件。

示例2

以下是将生成文件的代码改为生成包含随机数字的 CSV 文件的示例:

import random
import csv

@app.route('/generate_file')
def generate_file():
    file_path = os.path.join(app.root_path, 'example.csv')

    with open(file_path, 'w', newline='') as f:
        writer = csv.writer(f)
        writer.writerow(['ID', 'Value'])

        for i in range(10):
            writer.writerow([i, random.randint(1, 100)])

    return 'File generated successfully!'

在这个示例中,我们使用了 random 和 csv 两个 Python 模块。其中 random 用于生成随机数字,csv 用于操作 CSV 文件。

如果我们访问 /generate_file 后,会在服务器上生成一个包含 10 行随机数字的 CSV 文件,然后我们可以访问 /download/example.csv 下载该文件。