在 Flask 中下载多个文件
Downloading multiple files in Flask
我正在尝试为客户端提供在 Flask 中下载一些文件的选项。 user/client 可以下载多个文件或单个文件。
但是我无法理解如何为用户提供下载多个文件的选项。
这是我目前尝试过的方法:
@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")
即使是单个文件也无法正常工作。我尝试下载的文件类型是扩展名为 .sql .
的文本文件
我是否必须以某种方式压缩多个文件,然后提供下载选项?请指导我的可用选项。
您没有提供实际获取这些文件或此文件的代码示例。最小工作示例如下:
from flask import Flask, request
app = Flask(__name__)
@app.route('/download_files', methods=['POST'])
def download():
file = request.files['file'] # for one file
files = request.files.getlist("file[]") # if there're multiple files provided
if __name__ == "__main__":
app.run()
在你的 file 变量将成为 werkzeug.FileStorage 的对象之后,files 变量将成为这些对象的列表.
要下载所有这些文件,您可以查看此 .
为了同时提供多个文件作为下载,您只能选择将它们压缩到存档中。
在我的示例中,所有匹配指定模式的文件都被列出并压缩在一个 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,
attachment_filename='archive.zip'
)
我正在尝试为客户端提供在 Flask 中下载一些文件的选项。 user/client 可以下载多个文件或单个文件。
但是我无法理解如何为用户提供下载多个文件的选项。
这是我目前尝试过的方法:
@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")
即使是单个文件也无法正常工作。我尝试下载的文件类型是扩展名为 .sql .
的文本文件我是否必须以某种方式压缩多个文件,然后提供下载选项?请指导我的可用选项。
您没有提供实际获取这些文件或此文件的代码示例。最小工作示例如下:
from flask import Flask, request
app = Flask(__name__)
@app.route('/download_files', methods=['POST'])
def download():
file = request.files['file'] # for one file
files = request.files.getlist("file[]") # if there're multiple files provided
if __name__ == "__main__":
app.run()
在你的 file 变量将成为 werkzeug.FileStorage 的对象之后,files 变量将成为这些对象的列表.
要下载所有这些文件,您可以查看此
为了同时提供多个文件作为下载,您只能选择将它们压缩到存档中。
在我的示例中,所有匹配指定模式的文件都被列出并压缩在一个 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,
attachment_filename='archive.zip'
)