文件zip打包,流式下载python 代码

这篇博客介绍如何利用Python将文件进行zip打包,并实现流式下载。通过给出的示例代码,展示了如何处理指定地址的资源,如http://0.0.0.0:8000?abc,def。" 114627769,8095021,UE4大数据可视化:点击物体事件处理,"['UE4', '可视化', '教程', '游戏开发', '大数据可视化']

使用方法:

输入地址:例如http://0.0.0.0:8000?abc,def

#!usr/bin/python

#coding=utf-8
import uuid
import os
import zipfile
import re
import sys
import officetoimage
import rarfile
import tarfile
import subprocess
from cherrypy import wsgiserver
import time
import threading




########SET CODE TO DEAL CHINESE############
default_encoding = 'utf-8'
if sys.getdefaultencoding()!=default_encoding:
    reload(sys)
    sys.setdefaultencoding(default_encoding)
    




def app(environ,start_response):
    out = 'tmp/'+str(uuid.uuid1())+'.zip'
    status = '200 OK'
    filename = 'test.zip'
    response_header  = [('Content-type','application/'+out),('Content-disposition','attachment;filename='+filename)]
    start_response(status,response_header)
    #dict_e = get_environ()
    filename_list = environ['QUERY_STRING'].split(',')
    if os.path.exists('tmp') is not True:
        os.makedirs('tmp',0755)
   
            
    position = 0
    flag = True
    
    archive = zipfile.ZipFile(out,'a',zipfile.ZIP_DEFLATED)
    strs = open(out,'rb')
    for filename in filename_list:         
        if os.path.isfile(filename):
            archive.write(filename)
            strs.seek(position)
            result = strs.read()
            position = strs.tell()
            yield result
        else:            
            for root,dirs,files in os.walk(filename):
                for file in files:                    
                    archive.write(os.path.join(root,file))                    
                    strs.seek(position)
                    result = strs.read()
                    position = strs.tell()
                    yield result
    archive.close()
    strs.seek(position)
    result = strs.read()
    position = strs.tell()
    yield result
    return


if __name__ == '__main__': 
    server = wsgiserver.CherryPyWSGIServer(('0.0.0.0',8000),app)
    server.start()
   


          
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值