2

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

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

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

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

干杯,本

4

8 回答 8

5

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

于 2008-10-28T13:52:34.450 回答
1

这将为您提供一个 POST 的图像——您可能不喜欢它

  1. 将 iFrame 放在您想要图像的位置并调整大小并删除滚动条
  2. 将 src 设置为一个表单,其中隐藏输入设置为您的帖子参数,操作设置为将生成图像的 URL
  3. 在 iFrame 的 HTML 的 body.onload 中使用 JavaScript 自动提交表单

    然后,要么:

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

    或者:

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

  6. 使用 url 中的 id 提供带有 img 标签的 HTML -- 在服务器上查找 post 参数

    或者:

  7. 生成带有嵌入图像的图像标签的页面

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

于 2008-10-28T14:22:51.690 回答
1

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

于 2008-10-28T14:24:46.490 回答
0

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

于 2008-10-28T13:52:14.857 回答
0

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

于 2008-10-28T14:28:54.843 回答
0

从下面的链接看起来你会没事的一段时间;)

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

于 2008-10-28T14:48:08.097 回答
0

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

就像是:

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

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

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

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

于 2008-10-28T16:05:39.690 回答
0

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

newimg.src = 'blah';

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

于 2009-06-27T01:05:49.193 回答