c# - 将大量数据传递到 aspx 站点并返回图像

标签 c# asp.net image postback

我是 ASP.net 编程和 Web 编程的新手,因此我不知道所有术语,但我会尽力阐明要点。

我正在编写一个图像生成器,它将接收字符串并输出 PNG。我已经能够使用语法 LabelGenerator.aspx?epl2=UrlEncodedMessageGoesHere 成功完成此操作,访问该网站将生成一个 PNG 文件,该文件可在网页内使用以进一步显示。然而问题是我可能有一条超过 2048 字节的消息,而 IIS 不喜欢这样。

我知道执行 POST 而不是 GET 将使我摆脱 2048 的限制,但是如果我想在 IMG 标记内使用生成的图像,我不知道如何传递该信息。

这是我目前正在做的一些代码。

public partial class LabelGenerator : System.Web.UI.Page
{
    RotateFlipType RotateFlip;
    float Scale;
    String LabelCommands;
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            int rotateFlipInt;
            if (!float.TryParse(this.Request.QueryString["Scale"], out Scale))
                Scale = 1;
            if (!int.TryParse(this.Request.QueryString["RotateFlip"], out rotateFlipInt))
                rotateFlipInt = (int)RotateFlipType.Rotate270FlipNone;
            RotateFlip = (RotateFlipType)rotateFlipInt;
            LabelCommands = this.Request.QueryString["epl2"];

            if (LabelCommands != null && LabelCommands.Length > 0)
            {
                using (var bitmap = GenerateLabel())
                {
                    Response.ClearContent();
                    Response.ClearHeaders();
                    Response.ContentType = "image/png";
                    bitmap.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Png);
                }

            }
            else
            {
                Response.Write("You did not enter a valid epl2 command");
            }
        }
        catch (Exception ex)
        {
            Response.Write("An error occurred during processing.");
        }

    }
    private Bitmap GenerateLabel()
    {
         //(snip)
    }
}

最佳答案

看看 Google 用于 Chart API 的解决方案解决同样的问题

Specifying your chart as a URL in your browser or an tag is called a GET request. Making a GET request is simple, but GET URLs are limited to 2K characters. What if you have more data than that? Luckily, the Chart API supports HTTP POST for chart requests up to 16K long. The trade-off is the added complexity of using POST.

基本上,他们在页面上创建一个表单,其中包含包含要发送的数据的隐藏字段。当从 IFRAME 内发布此表单时,响应是图像。他们的形式看起来像这样

<form action='https://chart.googleapis.com/chart' method='POST'>
  <input type="hidden" name="cht" value="lc"  />
  <input type="hidden" name="chtt" value="This is | my chart"  />
  <input type='hidden' name='chs' value='600x200' />
  <input type="hidden" name="chxt" value="x,y" />
  <input type='hidden' name='chd' value='t:40,20,50,20,100'/>
  <input type="submit"  />
</form>

在此示例中,用户需要单击提交按钮才能获取图像。在 Google page还有更多使用 javascript 触发 POST 的示例

var frm = document.getElementById('post_form');
if (frm) { frm.submit(); }

关于c# - 将大量数据传递到 aspx 站点并返回图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5837372/

相关文章:

asp.net - ASP.NET 中的可折叠转发器

asp.net - 错误请求 - 无效的主机名 ASP.net Visual Studio 2015

ios - 水平 scrollView 不滚动

c# - 基于子列表属性的过滤器列表集合包含名称

c# - 处理 session 以实现可伸缩性

c# - 我想从 GridView 中删除记录。在此之前要求确认,如 "Are you sure to delete?"

javascript - 循环遍历数组并将图像元素的 HTML 与其 src 连接起来

java - 如何在边界之间反弹图像

c# - 如何在 ruby​​ 中调用 C# dll?

c# - 将大型虚拟文件从 C# 拖放到 Windows 资源管理器