使用 POST 在网页中包含动态图像?

Posted

技术标签:

【中文标题】使用 POST 在网页中包含动态图像?【英文标题】:Including a dynamic image in a web page using POST? 【发布时间】:2010-09-19 14:13:40 【问题描述】:

我编写了一个使用 GET 数据动态创建图像的 CGI 脚本。为了在我的网页中包含这张图片,我使用了以下代码:

<img src="image.py?text=xxxxxxxxxxxxxx">

问题是我预计将来“文本”字段会变得很长,并且 URL 会变得太大。从谷歌搜索来看,似乎对 URL 长度没有固定限制(即取决于浏览器、服务器、代理等)。有没有更好的方法来做到这一点?

如果重要的话,我正在使用 Django 和 Python,我不能使用任何客户端脚本(即 javascript)。

干杯, 本

【问题讨论】:

【参考方案1】:

img 使用 GET。你必须想出另一种机制。如何在 image.py 中调用相同的功能并将文件保存为您在 img 标签中引用的临时文件?或者如何在渲染这个 img 标签的过程中将文本的值保存在 db 行中,并使用 row_id 作为传递给 image.py 脚本的内容?

【讨论】:

【参考方案2】:

将文本存储在某处(例如数据库),然后通过主键传递。

【讨论】:

【参考方案3】:

这会给你一个 POST 的结果图片——你可能不喜欢它

    将 iFrame 放在您想要的图像位置并调整大小并移除滚动条 将 src 设置为表单,其中隐藏输入设置为您的帖子参数,操作设置为将生成图像的 URL

    在 iFrame 的 html 的 body.onload 中使用 JavaScript 自动提交表单

    然后,要么:

    将内容类型集返回到图像并流式传输图像字节

    或:

    将 post 参数存储在某处并生成一个小 id

    使用 url 中的 id 使用 img 标签返回 HTML -- 在服务器上查找帖子参数

    或:

    使用嵌入图像的图像标签生成页面

    http://danielmclaren.net/2008/03/embedding-base64-image-data-into-a-webpage

【讨论】:

【参考方案4】:

把已经说过的放在一起,创建两个页面怎么样。第一个页面在表单提交时发送一个 POST 请求(可以说是 create_img.py),并带有 text=xxxxxxx... 参数。然后 create_img.py 获取文本参数并用它创建一个图像并将其(或文件系统引用)插入到数据库中,然后在渲染第二页时,生成像 &lt;img src="render_img.py?row_id=0122"&gt; 这样的 img 标签。此时,render_img.py 只是查询给定图像的数据库。在创建图像之前,您可以检查它是否已经在数据库中,因此使用相同的文本参数重用/回收以前的图像。

【讨论】:

【参考方案5】:

您可以通过压缩 get 参数中的文本来缓解此问题。

【讨论】:

【参考方案6】:

从下面的链接看来你会没事的;)

http://www.boutell.com/newfaq/misc/urllength.html

【讨论】:

【参考方案7】:

如果你使用 django,也许你可以通过模板标签来代替?

类似:

<img src="% create_image "This is the text that will be displayed" %">

create_image 函数将使用虚拟/随机/生成的文件名创建图像,并返回路径。

这避免了必须 GET 或 POST 到脚本,并且图像将具有可管理的文件名。

我可以看到这种方法的一些潜在问题,我只是把这个想法扔在那里;)

【讨论】:

【参考方案8】:

好的,我来晚了,但您可以混合使用 MHTML(适用于 IE7 及更低版本)和数据 URI 方案(适用于所有其他现代浏览器)。它确实需要在客户端和服务器上进行一些工作,但您最终可以得到

newimg.src = 'blah';

有关如何执行此操作的文章位于http://gingerbbm.com/?p=127。

【讨论】:

以上是关于使用 POST 在网页中包含动态图像?的主要内容,如果未能解决你的问题,请参考以下文章

在动态框架中包含静态库的公共头文件

在 iOS 的动态框架中包含静态库

在 Eclipse 动态 Web 项目中包含 HTML 文件

动态网页问题。

用代码方式制作一个网站,内容自选; 至少包含3个网页,网页中包含必要的文字或图像;

在剑道的日期管道中包含变量值(动态格式):AngularJS