我試圖為客戶端提供在 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")
即使使用單個檔案,這也無法正常作業。我嘗試下載的檔案型別是擴展名為 .sql 的文本檔案。
我是否必須以某種方式壓縮多個檔案,然后提供下載選項?請指導我的可用選項。
uj5u.com熱心網友回復:
為了將多個檔案一起作為下載提供,您只能選擇將它們壓縮到一個存檔中。
在我的示例中,所有與指定模式匹配的檔案都在 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'
)
uj5u.com熱心網友回復:
您尚未提供實際獲取這些檔案或此檔案的代碼示例。最小的作業示例是這樣的:
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()
在您的檔案變數將成為werkzeug.FileStorage的物件之后,檔案變數將成為這些物件的串列。要下載所有這些檔案,您可以查看此問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/353811.html
上一篇:在左上角對齊文本
