如何通过HTTP发送文件,这是好方法,使用Python?

时间:2009-09-19 00:39:52

标签: python http http-headers

如果用Python2.6编写的一个可能的HTTP服务器具有对文件的本地访问权限,那么该服务器根据请求将文件返回给客户端的最正确方法是什么?

让我们说这是目前的情况:

header('Content-Type', file.mimetype)
header('Content-Length', file.size) # file size in bytes
header('Content-MD5', file.hash)    # an md5 hash of the entire file

return open(file.path).read()

所有文件都是.zip或.rar档案,不超过几兆字节。

根据目前的情况,浏览器奇怪地处理传入的下载。例如,没有浏览器知道文件的名称,因此它们使用随机或默认名称。 (Firefox甚至用.part扩展名保存了文件,即使它已经完整且完全可用。)

解决这个以及我可能甚至不知道的其他错误的最佳方法是什么?

我不发送哪些标题?

谢谢!

2 个答案:

答案 0 :(得分:6)

这是我发送ZIP文件的方式,

    req.send_response(200)
    req.send_header('Content-Type', 'application/zip')
    req.send_header('Content-Disposition', 'attachment;'
                    'filename=%s' % filename)

大多数浏览器都能正确处理它。

答案 1 :(得分:1)

如果您不必返回响应正文(也就是说,如果您的框架为响应正文提供了一个流),则可以避免将该文件保存在内存中,如下所示:

fp = file(path_to_the_file, 'rb')
while True:
    bytes = fp.read(8192)
    if bytes:
        response.write(bytes)
    else:
        return

您使用的是哪种网络框架?