在 Flask 中下载多个文件

era*_*erx 2 html python file download flask

我试图为客户端提供下载 Flask 中某些文件的选项。可以有多个文件或单个文件可供用户/客户端下载。

但是我无法理解如何为用户提供下载多个文件的选项。

这是我到目前为止所尝试过的:


@app.route('/download_files')
def download():
    count=0
    download_list=[]
    for path in pathlib.Path("dir1/dir2").iterdir():
        if path.is_file():
            for i in names:
                if pathlib.PurePosixPath(path).stem == i:
                    count += 1
                    download_list.append(path)
    return send_file(download_list, as_attachment=True, mimetype="text/plain", download_name="Downloaded Files", attachment_filename="Generated Files")
Run Code Online (Sandbox Code Playgroud)

即使对于单个文件,这也无法正常工作。我尝试下载的文件类型是扩展名为 .sql 的文本文件。

我是否必须以某种方式压缩多个文件,然后提供下载选项?请指导我的可用选项。

Det*_*lef 10

为了将多个文件一起提供下载,您只能选择将它们压缩为存档。
在我的示例中,所有与指定模式匹配的文件都会列出并压缩在 zip 存档中。这被写入内存并由服务器发送。

from flask import Flask
from flask import send_file
from glob import glob
from io import BytesIO
from zipfile import ZipFile
import os

app = Flask(__name__)

@app.route('/download')
def download():
    target = 'dir1/dir2'

    stream = BytesIO()
    with ZipFile(stream, 'w') as zf:
        for file in glob(os.path.join(target, '*.sql')):
            zf.write(file, os.path.basename(file))
    stream.seek(0)

    return send_file(
        stream,
        as_attachment=True,
        download_name='archive.zip'
    )
Run Code Online (Sandbox Code Playgroud)