2013-04-10 93 views
0

我从我的主页面传递图像字节数组到处理程序。我无法使用会话。是否有可能通过查询字符串中的字节数组我试过如何在查询字符串中传递长字节数组?

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

但它不工作。

+1

由于查询字符串长度限制,这似乎不太可能:http://stackoverflow.com/questions/812925/what-is-the-maximum-possible-length-of-a-query-string – spender 2013-04-10 10:59:56

+3

糟糕的坏主意。 – 2013-04-10 11:00:46

+1

你根本就不这样做。您不通过URL传递图像数据。传递指向给定图像的唯一标识符,并让ImageHandler加载图像。 – CodeCaster 2013-04-10 11:02:26

回答

1

这不起作用,因为在你使用UTF-8编码二进制数据的许多问题中。你真的想使用base64编码,然后你可能还需要URL编码。

两者都会使您的网址长度膨胀考虑并可能会达到极限。

您需要使用某种排序后端标识标记映像,并将其传递到URL中。

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

0

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

0

尝试将图像存储到一个位置到文件系统,通过GET传递的位置和检索第二脚本的图像,查询字符串要求有长度限制和图像是很多字节。

0

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