在浏览器中从命名管道打开文件 - 可能与否?没有保存在磁盘上
问题描述:
我在C#上创建了命名管道。在浏览器中从命名管道打开文件 - 可能与否?没有保存在磁盘上
服务器
using (NamedPipeServerStream pipeServer = new NamedPipeServerStream("testpipe", PipeDirection.Out))
{
Console.WriteLine("NamedPipeServerStream object created.");
Console.Write("Waiting for client connection...");
pipeServer.WaitForConnection();
Console.WriteLine("Client connected.");
try
{
using (BinaryWriter sw = new BinaryWriter(pipeServer))
{
sw.AutoFlush = true;
Console.Write("Enter text: ");
byte[] bytes = File.ReadAllBytes(@"C:\\Temp\test.png");
sw.Write(bytes);
}
}
catch (IOException e)
{
Console.WriteLine("ERROR: {0}", e.Message);
}
}
客户
using (NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", "testpipe", PipeDirection.In))
{
Console.Write("Attempting to connect to pipe...");
pipeClient.Connect();
Console.WriteLine("Connected to pipe.");
Console.WriteLine("There are currently {0} pipe server instances open.", pipeClient.NumberOfServerInstances);
using (BinaryReader sr = new BinaryReader(pipeClient))
{
byte[] list;
list = sr.ReadBytes(214);
}
}
Console.Write("Press Enter to continue...");
Console.ReadLine();
}
在这个管道存在的文件。如何在浏览器(IE)中打开它而不保存在磁盘上? 我知道我的文件是NT对象,但是如何打开它? (!)
答
如果你的照片足够小(〜32K base64编码)被作为参数传递,你确定与IE8或以上(或其他浏览器),你可以试试这个:
string base64String = Convert.ToBase64String(bytes);
SHDocVw.InternetExplorer IE = new SHDocVw.InternetExplorer();
object Empty = 0;
object URL = "about:blank";
IE.Visible = true;
IE.Navigate2(ref URL, ref Empty, ref Empty, ref Empty, ref Empty);
IHTMLDocument2 hTMLDocument = (mshtml.IHTMLDocument2)IE.Document;
HTMLWindow2 iHtmlWindow2 = (HTMLWindow2) hTMLDocument.Script ;
iHtmlWindow2.execScript("document.write(\"<img src=\\\"data:image/png;base64," + base64String + "\\\">\")", "javascript");
如果我想别的东西我会让你知道:)
开箱即用的答案可能不是,但一个解决方案可能是一个自定义的命名管道URL名称的Internet Explorer http:// msdn .microsoft.com/en-us/library/jj650247(v = vs.85).aspx – rene
恐怕这确实是临时文件的用途。 – Gusdor