Flask下载多个文件

Posted 小小易拉罐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask下载多个文件相关的知识,希望对你有一定的参考价值。

使用zipfile模块可以将多个文件打包成zip文件进行下载,但是常规的操作方式会在服务器磁盘上生成一个zip文件占用磁盘空间。

后引入BytesIO将文件写入到内存中然后下载:

 1 def dl_plan(pid):
 2     """
 3     下载测试计划关联的测试文件,分单个和多个文件情况(多个文件打包成zip下载)。
 4     1. 计划只有一个文件则直接下载.xlsx文件
 5     2. 计划有多个文件,则打包成zip通过BytesIO直接写入到内存中,不在本地生成.zip文件。
 6     :param pid
 7     :return:
 8     """
 9 
10     dirpath = Config.FILE_UPLOAD_DIR
11     tp = TestPlan.objects.get_or_404(id=pid)
12     fp_test_files = tp.test_files
13     file_list = fp_test_files.split(",")
14     dl_name = {}.zip.format(tp.planname)
15 
16     if len(file_list) == 1:
17         return send_from_directory(dirpath, fp_test_files, as_attachment=True)
18     else:
19         memory_file = BytesIO()
20         with zipfile.ZipFile(memory_file, "w", zipfile.ZIP_DEFLATED) as zf:
21             for _file in file_list:
22                 with open(os.path.join(dirpath, _file), rb) as fp:
23                     zf.writestr(_file, fp.read())
24         memory_file.seek(0)
25         return send_file(memory_file, attachment_filename=dl_name, as_attachment=True)

 

以上是关于Flask下载多个文件的主要内容,如果未能解决你的问题,请参考以下文章

flask下载小服务

flask下载小服务

12_关于flask中的宏

使用 Flask 和 JS 从服务器下载文件

Flask-Mail 如何将多个文件添加到邮件中?

Flask之模板之宏继承包含