代码之家  ›  专栏  ›  技术社区  ›  gerdemb

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

  •  2
  • gerdemb  · 技术社区  · 16 年前

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

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

    问题是,我预计未来“文本”字段会变长,URL也会变大。从谷歌搜索来看,似乎没有固定的URL长度限制(即取决于浏览器、服务器、代理等),有更好的方法吗?

    如果这很重要,我将使用Django和Python,并且不能使用任何客户端脚本(即javascript)。

    干杯, 本

    8 回复  |  直到 16 年前
        1
  •  5
  •   Greg    16 年前

    将文本存储在某个地方(例如数据库),然后传递主键。

        2
  •  1
  •   Lou Franco    16 年前

    这会给你一个帖子的结果——你可能不喜欢它。

    1. 将iframe放在所需的位置并调整其大小,然后删除滚动条
    2. 将SRC设置为隐藏输入设置为Post参数的表单,并将操作设置为将生成图像的URL
    3. 在iframe的html body.onload中使用javascript自动提交表单

      然后,要么:

    4. 将内容类型设置为图像并流式传输图像字节

      或:

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

    6. 使用URL中的ID为HTML提供一个img标记——在服务器上查找post参数

      或:

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

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

        3
  •  1
  •   fuentesjr    16 年前

    把已经说过的话放在一起,写两页怎么样?第一页在表单提交时(比如创建“img.py”)发送一个post请求,其中文本=XXXXXXX…参数。然后,create_img.py接受文本参数并用它创建一个图像,并将它(或文件系统引用)插入到数据库中,然后在呈现第二页时,生成img标记,如 <img src="render_img.py?row_id=0122"> .此时,render img.py只需查询给定图像的数据库。在创建图像之前,您可以检查它是否已经在数据库中,因此使用相同的文本参数重用/回收以前的图像。

        4
  •  0
  •   mspmsp    16 年前

    IMG的使用GET。你必须想出另一种机制。在image.py中调用相同的功能,并将文件保存为一个临时文件,您在img标记中引用它,怎么样?或者,在呈现此img标记的过程中,将文本值保存在db行中,并使用行“id”作为传递到image.py脚本的内容,怎么样?

        5
  •  0
  •   John Montgomery    16 年前

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

        6
  •  0
  •   J.D. Fitz.Gerald    16 年前

    从下面的链接来看,您可能会好一会儿;)

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

        7
  •  0
  •   bjornkri    16 年前

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

    类似:

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

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

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

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

        8
  •  0
  •   gingerbbm    16 年前

    好吧,我来派对有点晚了,但是你可以混合使用mhtml(用于ie7及以下版本)和data-uri方案(用于所有其他现代浏览器)。它确实需要在客户机和服务器上做一些工作,但最终您可以

    newimg.src = 'blah';
    

    关于如何做到这一点的报告在 http://gingerbbm.com/?p=127 .