如何使用python将.text文件内容显示到浏览器中

时间:2013-04-15 09:44:24

标签: python

我们有一个test.py,应该在同一个浏览器中显示.png文件和.txt文件。以下是我的代码:

print "Content-type: image/png\n"
print file(r"/var/www/cgi-bin/testpie.png", "rb").read()
myurl = "file://var/www/html/test.txt"

webbrowser.open(myurl)

但我在浏览器中只收到.png个文件。那么如何在浏览器中使用python显示它们?

3 个答案:

答案 0 :(得分:4)

浏览器显示HTML文档。 HTML文档可以包含divspanp等标记中的文本,只需将文本包含在元素中即可。例如,<div>Hello!</div>会显示文字Hello。但它们不直接包含图像;相反,它们包含链接到图像,作为src标记的img。例如,<img src="http://example.com/foo.png">显示foo.png图像。

所以,有两种方法可以做你想做的事。


简单的方法是公开两个资源(使用单独的URL):( 1)PNG图像,以及(2)包含指向PNG图像的链接的HTML页面(并包含直接发短信。)

例如......

testpie_image.py:

print "Content-type: image/png\n"
print open(r"/var/www/cgi-bin/testpie.png", "rb").read()

testpie.py:

print """Content-type: text/html

<html><head></head><body>
<img src="testpie_image.py" />
<div>{}</div>
</body></html>
""".format(open(r"/var/www/html/test.txt").read())

现在,如果有人浏览http://example.com/cgi-bin/testpie.py,那将触发您的第二个脚本,因此他们将获得这样的HTML页面:

<html><head></head><body>
<img src="testpie_image.py" />
<div>Blah blah this is my text file.</div>
</body></html>

然后他们的浏览器会关注http://example.com/cgi-bin/testpie-image.py的链接,这会触发您的第一个脚本,这样他们就会获得PNG图片。


更难的方法是使用一种名为data:的特殊URL方案,它允许您在线嵌入数据,就好像它是指向单独资源的链接一样。你需要做更多的工作来嵌入它,但这意味着你只需要一个URL而不是两个:

print """Content-type: text/html

<html><head></head><body>
<img src="data:image/png;base64,{}"</img>
<div>{}</div>
</body></html>
""".format(open(r"/var/www/cgi-bin/testpie.png", "rb").read().encode("base64"),
           open(r"/var/www/html/test.txt").read())

现在,当有人浏览http://example.com/cgi-bin/testpie.py时,他们会得到一个这样的HTML页面:

<html><head></head><body>
<img src="data:image/png;base64,1Ab…
Z2y" />
<div>Blah blah this is my text file.</div>
</body></html>

  

嗨,我从html文件中删除了一个python文件,当我在文本框中输入一些关键字并单击“提交”时,它将执行python文件。所以python文件生成两个文件1).png和2)文本文件。所以我的要求是当我点击html中的提交时立即在网络浏览器中显示.png和.txt文件。

好的,让我解释一下。

我假设您正在使用连接到传统CGI服务器的传统表单提交。单击Web浏览器中的“提交”按钮时,会向构建HTML文档的CGI脚本发送请求。该文档包含文本文件,还包含链接到第二个CGI脚本的图像。您的Web浏览器会通过跟随第二个CGI的链接自动加载图像,该CGI会生成并返回显示的PNG文件。因此,您可以在一个浏览器页面中看到图像和文本。


最后一件事:您可能不希望将文本文件放在/ var / www层次结构中,如果您使用的是data: URL,则可能不希望放置图像文件那里有。

答案 1 :(得分:1)

如果要显示两种类型的数据,则需要:

  • 有两个单独的HTTP请求
  • 使用数据格式,其中一个可以嵌入另一个(例如HTML而不是文本,PNG作为带有data:方案的URI嵌入)。

您无法同时返回文本文档和PNG图像。

答案 2 :(得分:0)

您可以使用包含文本内容和图像的Python创建一个简单的HTML文件,并在浏览器中打开此文件。