python - 从 Web 服务器向客户端提供二进制文件

标签 python content-type

通常,当我想将网络服务器文本文件传输到客户端时,我是这样做的

import cgi

print "Content-Type: text/plain"
print "Content-Disposition: attachment; filename=TEST.txt"
print

filename = "C:\\TEST.TXT"
f = open(filename, 'r')
for line in f:
    print line

非常适用于 ANSI 文件。但是,比如说,我有一个二进制文件 a.exe(这个文件在 Web 服务器的 secret 路径中,用户不能直接访问该目录路径)。我想用类似的方法转移。我该怎么做?

  • 我应该使用什么内容类型?
  • 使用打印似乎在客户端收到了损坏的内容。什么是正确的方法?

我使用以下代码。

#!c:/Python27/python.exe -u

import cgi

print "Content-Type: application/octet-stream"
print "Content-Disposition: attachment; filename=jstock.exe"
print

filename = "C:\\jstock.exe"
f = open(filename, 'rb')
for line in f:
    print line

但是,当我将下载的文件与原始文件进行比较时,似乎每一行之后都有一个额外的空格(或更多)。

alt text

最佳答案

同意上述关于“rb”和 Content-Type header 的发帖人。

另外:

for line in f:
    print line

当在二进制文件中遇到 \n\r\n 字节时,这可能是个问题。做这样的事情可能会更好:

import sys
while True:
    data = f.read(4096)
    sys.stdout.write(data)
    if not data:
        break

假设这是在 CGI 环境中的 Windows 上运行,您需要使用 -u 参数启动 python 进程,这将确保 stdout 不处于文本模式

关于python - 从 Web 服务器向客户端提供二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4517134/

相关文章:

java - HttpServletResponse 无法设置字符集

html - 我如何告诉 Apache 将没有扩展名的文件作为 text/html 提供?

java - 获取内容类型的最快方法

python - 如何在pyspark中保存没有日期的时间信息?

python - 计算数据结构的 md5 哈希

python - 关联自定义模块字段 - 产品 - OpenErp

javascript - React-Native,axios Post FormData,每个部分具有不同的 Content-Type

python - 如何在 Keras 中计算精度和召回率

python - Pygtk + Glade 自刷新标签

python - 如何在 Python 2 中发送 HEAD HTTP 请求?