解析python中的wsgiserver

本文介绍了一个能够实现在HTTP响应过程中边打包边下载文件的WSGI应用示例。通过解析请求环境变量(environ)获取待打包的文件名,并设置正确的HTTP头来触发浏览器的下载行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

just for fun

server = wsgiserver.CherryPyWSGIServer(('0.0.0.0',8000),app)
server.start()

是程序入口,其中app是你的应用程序

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(',')

其中,需要下载文件,其实我是个http小白,然后,发现只要修改header里面的content-type就可以了,修改为zip

你打开网址就可以下载了

但是,我需要得到要打包的文件名称

这个在uri中传入

我发现,这个environ就是携带这些信息的载体

哈哈

顺利完成

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

文档上说,返回的是个迭代器,如果是unbuffered file,其实,我当然不懂啊,所以,我想着迭代器,那写一个迭代器生成器就可以了

果然,我成功率

这个代码可以边打包边下载啊

哈哈,看着开源代码为我做的贡献,我或许也应该做出些表示吧哈哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值