Answers
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