Apache:下载文件,在每个LF(甚至是电子表格)之前插入CR

时间:2009-12-29 04:07:08

标签: python apache cgi

我在Windows XP上使用Apache 2.2.14和Python 2.6 for CGI。通过CGI发送的文件已损坏。在每个LF之前插入CR。 Firefox,IE和Curl客户端给出了相同的结果。该文件的大小正确,但CR全部插入,数据向下移动并截断。我可以查看服务器上的文件,这很好。

Apache中是否有一些开关我丢失了?

以下是编写HTTP标头并发送文件的python代码:


outsize = os.path.getsize(outfile)
mheader = "Content-type: application/octet-stream\n"
mheader = mheader + "Content-Length: "+str(outsize) + "\n"
mheader = mheader + "Content-Disposition: attachment; filename=\"product.xls\"\n\n" 
sys.stdout.write(mheader)
sys.stdout.write(file(outfile, "rb").read())

标题如下所示:

Content-type: application/octet-stream
Content-Length: 84210
Content-Disposition: attachment; filename="product.xls"

1 个答案:

答案 0 :(得分:3)

使用msvcrt.setmode(1, os.O_BINARY)(在你编写标题和sys.stdout.flush之后)将标准输出设置为二进制模式 - 糟糕的Apache是​​无辜的,它是Windows的东西; - )。