我正在将一个图像字节数组从我的主页传递给处理程序。我不能使用会话。是否可以在我尝试过的查询字符串中传递字节数组
imgPreview.ImageUrl=ImageHandler.ashx?imagebytes=" + System.Text.Encoding.UTF8.GetString(fileUploader.FileBytes);
但它不起作用。
它不起作用,因为在与此相关的许多问题中,您使用 UTF-8 对二进制数据进行编码。您确实想使用 base64 编码,然后您可能还需要对其进行 URL 编码。
两者都会大大增加您的网址长度,并且可能会达到限制。
您需要使用某种后端的 ID 标记图像,并将其传递到 URL 中。
如果您不能使用会话存储(无论如何都不应该用于图像)或数据库,您可以将图像存储在文件系统上。
冒着创建“我也是”答案的风险;Base64编码将是执行此操作的唯一合理方式,但几乎可以肯定(如绝对)不是您真正想要的方式去做这个。也许如果您提供更多背景信息,帮助解决方案会更容易。我想如果我们只讨论像图标这样的微小图像,它可能会起作用,但它仍然不是您想要的解决方案。查询字符串并不意味着直接传递对象。它旨在请求资源。正如其他人建议的那样,您可以将图像保存到磁盘上的文件并直接在 URL 中引用这些文件。如果您的图像在数据库中,您可以将图像的 id 放在 url 中,并创建一个页面,为您的图像设置适当的 MIME 类型,并将这些位流式传输给调用者。如果你这样做了,你最终可能会得到一个看起来像的 url http://servername/image.aspx?id=123
,对于调用者来说,它在功能上与http://servername/image.jpg
. 事实上,如果你这样做了,那么你还可以选择使用额外的查询字符串参数来指定图像的输出大小,甚至是图像的类型(在这种情况下,你的 aspx 页面会调整图像大小或转换它在格式之间)。
尝试将图像存储到文件系统中的某个位置,通过 get 传递位置并从第二个脚本中检索图像,查询字符串请求有长度限制,并且图像有很多字节。
不,你不能这样做。查询字符串长度有限制。这些限制因浏览器而异。