【发布时间】:2016-03-15 01:19:47
【问题描述】:
我有下面的 SimpleHttp 服务器代码:
using (Stream fs = File.Open(@"C:\Users\Mohamed\Desktop\Hany.jpg", FileMode.Open))
{
StreamWriter OutputStream = new StreamWriter(new BufferedStream(someSocket.GetStream()));
OutputStream.WriteLine("HTTP/1.0 200 OK");
OutputStream.WriteLine("Content-Type: application/octet-stream");
OutputStream.WriteLine("Content-Disposition: attachment; filename=Hany.jpg");
OutputStream.WriteLine("Content-Length: " + img.Length);
OutputStream.WriteLine("Connection: close");
OutputStream.WriteLine(""); // this terminates the HTTP headers
fs.CopyTo(OutputStream.BaseStream);
OutputStream.Flush();
//OutputStream.BaseStream.Flush();
}
问题是当我看到输出 http 响应时,标头位于文本的末尾,并且来自 BaseStream 的图像二进制文件甚至在标头之前排在第一位。输出示例是(当然我删除了图像的长字节):
ä3ST)ëî!ðDFYLQ>qâ:oÂÀó?ÿÙHTTP/1.0 200 OK
Content-Type: image/png
Connection: close
我想要的是颠倒顺序并将标题放在顶部,得到的是这样的:
HTTP/1.0 200 OK
Content-Type: image/png
Connection: close
ä3ST)ëî!ðDFYLQ>qâ:oÂÀó?ÿÙT4ñ®KÛ'`ÃGKs\CGÔ«¾+L»ê±?0Íse3rïÁå·>"ܼ;®N¦Ãõ5¨LZµL¯
在流写入器或 BaseStream 上使用刷新无关紧要。 任何帮助!
【问题讨论】:
-
StreamWriter 有一个缓冲区,您必须在复制到其 BaseStream 之前对其进行 Flush()。复制之后再做为时已晚。
标签: c# .net filestream streamwriter