是否可以派生(伪造)内存中MemoryStream文件的位置路径?

时间:2013-01-15 11:59:39

标签: c# file-io .net-3.5 filestream memorystream

是否可以派生内存文件的位置路径?

我这样做的理由是基于我的WinForms应用程序以Base64编码的字符串格式检索的图像集合。我需要构建一些HTML并注入这些图像,以便它们可以在我的应用程序的WebBrowser控件中的嵌入页面上呈现。由于我们在这里谈论HTML,我需要使用<IMG>标签来显示图像。这个元素需要接受一个“src”路径,这意味着我需要确定一个导出每个内存中图像的绝对/相对路径的方法。

3 个答案:

答案 0 :(得分:2)

如果您控制在服务器上运行的应用程序(您在评论中指明),那么您应该能够重定向特定资源的请求。例如,如果用户应用程序请求&#34; http://myserver/memory/imgxxx.jpg" ;,服务器应该能够拦截它,而不是尝试从磁盘提供imgxxx.jpg,构建一个来自内存中数据的图像,并将其发送给客户端。

现在,如果您只是将base64编码数据发送到客户端,并希望客户端以某种方式访问​​数据并进行转换......这是一个更难的问题。我可以设想使用JavaScript来替换所有具有相应图像的给定属性的img标记。但我怀疑它会变得非常混乱。如果可能的话。

另一种可能性是创建派生的WebBrowser组件并自定义其行为。一个很好的例子是CreateSink方法文档。有可能编写一个在组件想要下载内容时调用的处理程序。然后,您可以拦截呼叫并提供内存中的图像。我不确定这是可能的。您可以查看WebBrowser customization。不过,我会说,只是编写文件并使用&#34;文件://&#34;网址。

答案 1 :(得分:1)

您可以使用HttpListener class

在应用程序中构建轻量级HTTP服务器

您将需要使用异步模型。创建一个为其提供内容的网址,例如“http:// *:8080 / appdata”,然后在您的html中使用该网址(http:// localhost:8080 / appdata / someinmemoryresource“)。

当HttpListener收到请求时,查看路径并回复您想要提供的内存数据!

答案 2 :(得分:0)

IMG标记不需要路径,需要URL。您无法使用URL引用内存数据。浏览器将使用IMG标记中提供的URL发出第二个HTTP请求,此时此URL必须有效。

考虑添加MVC操作或HTTP处理程序以返回图像字节。或者将其保存到磁盘。