gpt4 book ai didi

python - 使用 Python over Apache 通过 HTTP 将文件推送给用户时文件名错误

转载 作者:可可西里 更新时间:2023-11-01 16:11:38 24 4
gpt4 key购买 nike

我正在向我们的网站添加功能,以便用户可以下载存储在数据库中的文件。问题是我无法为用户正确指定文件名 - 而是提示用户使用运行网站的主要 python 脚本的名称保存文件。我正在设置 Content-Disposition 信息,但它没有按预期工作。我已将代码编辑为以下内容,但仍然无法正常工作:

import sys, os
import mydatabasemodule
PDFReport = [...read file from database ...]
print('Content-Type: application/octet-stream\n')
print('Content-Disposition: attachment; filename=\"mytest.pdf\"\n')
print(report)
sys.stdout.close()

运行此代码会提示用户将文件下载为 mysite.py。 PDF 下载正确,只是文件名错误。

谁能告诉我这里做错了什么?在完整版代码中,我还设置了 Content-Description 和 Content-Length,但同样失败。这些文件很小,我试图避免将它们保存到磁盘,但即使我这样做,也会出现同样的问题。

[编辑]Web 服务器运行 CentOS 5.5、Python 2.4.3、Apache 2.2.3 和 mod_python。我已经在使用 Google Chrome 17.0.963.46 beta 和 Firefox 13 的 Ubuntu 11.04 客户端上对此进行了测试。如果我改为尝试显示内联 PDF:

print('Content-type: application/pdf\n')
print('Content-Disposition: inline; filename=\"mytest.pdf\"\n')
print("Content-Length: %d" % len(report))

然后 Chrome 显示 PDF(带有插件)并且 Firefox 要求保存文件,将其识别为 PDF 但文件名仍然错误,即文件名仍然是脚本名称。

[编辑]Mike 在下面给出了解决方案。我认为问题是我在上面第一行中添加的换行符。由于 print 添加了一个换行符,第二个换行符表示 header 结束,因此从未读取 Content-Disposition 行。感谢大家的快速帮助!

最佳答案

在 python 版本 < 3.0 中,print 不是一个函数,它会自动添加一个换行符。试试这个。

import sys, os
import mydatabasemodule
PDFReport = [...read file from database ...]
print 'Content-Type: application/octet-stream'
print 'Content-Disposition: attachment; filename="mytest.pdf"'
print
sys.stdout.write(PDFReport)
sys.stdout.flush()

关于python - 使用 Python over Apache 通过 HTTP 将文件推送给用户时文件名错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10922176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com