【问题标题】:How to pass a long byte array in query string?如何在查询字符串中传递长字节数组?
【发布时间】:2013-04-02 04:19:34
【问题描述】:

我正在将一个图像字节数组从我的主页传递给处理程序。我不能使用会话。是否可以在我尝试过的查询字符串中传递字节数组

imgPreview.ImageUrl=ImageHandler.ashx?imagebytes=" + System.Text.Encoding.UTF8.GetString(fileUploader.FileBytes);

但它不起作用。

【问题讨论】:

  • 由于查询字符串长度限制,这似乎不太可能:stackoverflow.com/questions/812925/…
  • 你根本不这样做。您不通过 URL 传递图像数据。传递一个指向给定图像的唯一标识符并让 ImageHandler 加载图像。
  • 显然它不起作用。你是怎么想到做这样的事情的
  • 这是将图像从页面发送到其他任何东西的糟糕方式,也不要使用会话,这也不好,你能解释一下你为什么要这样做,以便有人可以给你一个更好的方法这样做
  • 你需要 urlsafe base64 编码。 stackoverflow.com/questions/432002/…

标签: c# asp.net .net webpage


【解决方案1】:

冒着创建“我也是”答案的风险; Base64 编码将是执行此操作的唯一合理方法,但几乎可以肯定(如绝对)不是您真正想要这样做的方式。也许如果您提供更多的上下文,帮助解决方案会更容易。我想如果我们只讨论像图标这样的微小图像,它可能会起作用,但它仍然不是您想要的解决方案。查询字符串并不意味着直接传递对象。它旨在请求资源。正如其他人建议的那样,您可以将图像保存到磁盘上的文件并直接在 URL 中引用这些文件。如果您的图像在数据库中,您可以将图像的 id 放在 url 中,并创建一个页面,为您的图像设置适当的 MIME 类型,并将这些位流式传输给调用者。如果你这样做了,你最终可能会得到一个看起来像 http://servername/image.aspx?id=123 的 url,对于调用者来说,它在功能上与 http://servername/image.jpg 完全相同。事实上,如果你这样做了,那么你还可以选择使用额外的查询字符串参数来指定图像的输出大小,甚至是图像的类型(在这种情况下,你的 aspx 页面会调整图像大小或转换它在格式之间)。

【讨论】:

    【解决方案2】:

    尝试将图像存储到文件系统中的某个位置,通过 get 传递位置并从第二个脚本中检索图像,查询字符串请求有长度限制并且图像是很多字节。

    【讨论】:

      【解决方案3】:

      它不起作用,因为在与此相关的许多问题中,您使用 UTF-8 对二进制数据进行编码。您确实想使用 base64 编码,然后您可能还需要对其进行 URL 编码。

      两者都会大大增加您的网址长度,并且可能会达到限制。

      您需要使用某种后端 ID 标记图像,并将其传递到 URL 中。

      如果您不能使用会话存储(无论如何都不应该用于图像)或数据库,您可以将图像存储在文件系统中。

      【讨论】:

        【解决方案4】:

        这不是在查询字符串上传输长表达式的正确方法。

        你应该发出一个httprequest。 https://stackoverflow.com/a/5527349/413032

        你应该控制长度

        【讨论】:

          【解决方案5】:

          不,你不能这样做。查询字符串长度有限制。这些限制因浏览器而异。

          【讨论】:

            猜你喜欢
            • 2016-02-23
            • 1970-01-01
            • 2012-07-03
            • 2014-04-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-11-29
            相关资源
            最近更新 更多