是否有可能导出(伪造)内存中的MemoryStream文件的位置路径?

本文关键字:MemoryStream 文件 位置 路径 内存 有可能 伪造 是否 | 更新日期: 2023-09-27 17:53:07

是否可以导出内存文件的位置路径?

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

是否有可能导出(伪造)内存中的MemoryStream文件的位置路径?

如果您控制在服务器上运行的应用程序(您在注释中指出了这一点),那么您应该能够重定向对特定资源的请求。例如,如果用户应用程序请求"http://myserver/memory/imgxxx.jpg",服务器应该能够拦截它,而不是尝试从磁盘提供imgxxx.jpg,而是从内存中的数据构造一个映像,并将其发送到客户端。

现在,如果你只是将base64编码的数据发送给客户端,并希望客户端以某种方式访问数据并进行转换…这是一个更难的问题。我可以设想用JavaScript做一些事情,用相应的图像替换所有具有某些给定属性的img标记。但我怀疑那会很混乱。如果有可能的话。

另一种可能性是创建派生的WebBrowser组件并自定义其行为。CreateSink方法文档中有一个很好的例子。可以编写一个处理程序,当组件想要下载某些东西时调用该处理程序。然后,您可以拦截调用并提供您的内存映像。我不确定这是否可能。您可以看一下WebBrowser定制。不过,我要说的是,直接编写文件并使用"file://" url可能更容易。

您可以使用HttpListener class在应用程序中构建轻量级HTTP服务器。

您将希望使用异步模型。创建一个提供内容的url,例如"http://*:8080/appdata",然后在html (http://localhost:8080/appdata/someinmemoryresource")中使用该url。

当httplistener接收到请求时,查看路径并使用您想要服务的内存数据进行响应!

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

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