python下载后端文件、文件夹,flask框架

该博客介绍了一个Python脚本,用于压缩指定的文件夹,并在Flask应用中提供下载。当接收到前端请求时,如果请求的是文件夹,脚本会先将其压缩,然后返回压缩文件;如果是文件,则直接返回文件。主要使用了`zipfile`库来实现压缩功能,以及`send_from_directory`来发送文件。
摘要由CSDN通过智能技术生成
def zipDir(dirpath, outFullName):
    """
    压缩指定文件夹
    :param dirpath: 目标文件夹路径
    :param outFullName: 压缩文件保存路径+xxxx.zip
    :return: 无
    """
    zip = zipfile.ZipFile(outFullName, "w", zipfile.ZIP_DEFLATED)
    for path, dirnames, filenames in os.walk(dirpath):
        # 去掉目标跟路径,只对目标文件夹下边的文件及文件夹进行压缩
        fpath = path.replace(dirpath, '')
 
        for filename in filenames:
            zip.write(os.path.join(path, filename), os.path.join(fpath, filename))
    zip.close()
    
@app.route('/uploads/<path:filename>')
def download_file(filename):
	"""
    返给前端文件
    :param filename: 前端希望下载的路径
    :return: 文件或压缩后的文件夹
    """
    folder="/code/"
    filepath = folder + filename  # 构造本机绝对路径
    input_path,input_name=os.path.split(filepath)
    # 判断路径是否存在,文件直接返回,文件夹压缩返回
    if os.path.isdir(filepath): 
        print("it's a directory")
        outFullName = input_path +'/'+ input_name+'.zip'
        if not os.path.exists(outFullName):
            zipDir(filepath, outFullName)
        return send_from_directory(input_path,
                               input_name+'.zip', as_attachment=True)
    elif os.path.isfile(filepath):
        print("it's a normal file")
        return send_from_directory(input_path,
                               input_name, as_attachment=True)
    else:
        return jsonify(bool=False, msg='No such file, please check file path')

参考教程:
https://www.kite.com/python/docs/flask.send_from_directory
https://blog.csdn.net/xuezhangjun0121/article/details/112619852

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值