Python flask框架中实现附件打包下载

一.将目录文件夹内的文件打包成zip格式下载, 不包含文件所在的文件夹
import os
from flask import Flask, send_file
import zipfile

app = Flask(__name__)

@app.route('/download')
def download():
    # 指定要打包的目录
    folder = 'path/to/folder'

    # 创建一个空的内存文件,用于存储压缩文件
    in_memory_zip = BytesIO()

    # 创建一个ZipFile对象,将压缩文件写入内存文件
    with zipfile.ZipFile(in_memory_zip, 'w', compression=zipfile.ZIP_DEFLATED) as zf:
        # 遍历目录下的所有文件,并将文件添加到zip文件中
        for root, dirs, files in os.walk(folder):
            for file in files:
                file_path = os.path.join(root, file)
                # 将文件添加到zip文件中,并指定压缩文件中的文件名为文件相对路径
                zf.write(file_path, arcname=file)

    # 将内存文件指针移动到文件开头
    in_memory_zip.seek(0)

    # 返回压缩文件,指定文件名为download.zip
    return send_file(in_memory_zip, attachment_filename='download.zip', as_attachment=True)


二.将目录文件夹内的文件打包成zip格式下载, 包含文件所在的文件夹

这里会把文件所在的文件夹也会一起压缩

from flask import Flask, request, send_file
from io import BytesIO
import zipfile

app = Flask(__name__)

@app.route('/download')
def download():
    # 获取要下载的文件名列表
    filenames = ["/path/files/test.png", "/root/user/name.docx"]

    # 创建一个 BytesIO 对象,用于在内存中生成压缩文件
    in_memory_zip = BytesIO()

    # 将多个文件打包成压缩文件
    with zipfile.ZipFile(in_memory_zip, 'w', compression=zipfile.ZIP_DEFLATED) as zf:
        for filename in filenames:
            zf.write(filename)

    # 将 BytesIO 对象指针移到开头
    in_memory_zip.seek(0)

    # 返回压缩文件作为响应体,设置 Content-Disposition 头部以便浏览器自动下载该文件
    return send_file(in_memory_zip, attachment_filename='files.zip', as_attachment=True)

if __name__ == '__main__':
    app.run()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容