怎么做到多文件合并为一个压缩文件下载?


如百度云。
选择多个文件 统一下载为一个压缩文件。

程序员 c# asp.net

TianG 10 years, 3 months ago
Khoomei answered 10 years, 3 months ago

这个问题之前我也想过。

下载文件的时候,发送的请求是:


 > GET /xxxx.zip HTTP/1.1
> User-Agent: curl/7.30.0
> Host: pan.baidu.com
> Accept: */*

服务器的回应是:


 > Server: nginx
> Date: Wed, 13 Aug 2014 00:27:55 GMT
> Content-Type: application/zip
> Content-Length: 80501624
> {文件数据}

常见的 lighttpd,nginx 服务器可以知道 /xxxx.zip 是磁盘上的哪个文件然后给你找出来,并读取它的内容,然后传回去。

要打包下载,那么就要自己处理这个 /xxxx.zip 的请求,不能用它默认的了。要自己打包一个 zip,然后传回去。

用 python 的 WSGI 来举例:


 from subprocess import *

def wsgi(env, sr):
    if env['RAW_URI'] == '/xxxx.zip':
        p = Popen(['zip', '-', 'filea', 'fileb'], stdout=PIPE)        
        sr('200 OK', ['Content-Type', 'application/zip'])
        return p.stdout

这个代码我没试过能不能运行。。不过大概是这样子了。

zip 的参数 - 表示输出到 stdout,打包的文件是 filea,fileb。

豆瓣噜大酱 answered 10 years, 3 months ago

Your Answer