如何使用Python以正确方式通过HTTP发送文件?
如果一个用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 个回答
1
如果你不需要返回响应的内容(也就是说,如果你的框架给你提供了一个响应内容的流),你可以用下面这种方法来避免把文件放在内存里:
fp = file(path_to_the_file, 'rb')
while True:
bytes = fp.read(8192)
if bytes:
response.write(bytes)
else:
return
你在使用哪个网页框架呢?
6
这是我发送ZIP文件的方法,
req.send_response(200)
req.send_header('Content-Type', 'application/zip')
req.send_header('Content-Disposition', 'attachment;'
'filename=%s' % filename)
大多数浏览器都能正确处理它。