StreamWriter
(ストリームに特定のEncoding
の文字列を書き込むように設計されている)をバイナリデータで使用すると、面倒なことが起こります。
StreamWriter.Write
というオーバーロードを呼び出すように見えるのは、バイトを出力ストリームにそのまま書き込むという信念です。ドキュメントは、実際にはこの過...
は、次の2つのオプションがあり、そのオブジェクト
にToStringメソッドを呼び出すことにより、テキスト文字列またはストリームにオブジェクトのテキスト表現を書き込みますと述べています。
byte[] ImgFile = File.ReadAllBytes(Program.Start_Directory + URL);
sw.Write("HTTP/1.0 200 OK\r\n");
//...etc
sw.Flush();
sw.BaseStream.Write(ImgFile,0,ImgFile.Length);
か、単にバイトに全力を尽くす:基本となるストリームに直接バイナリデータを書き込む、その後、StreamWriter
とFlush
を使用してキャリー
var sb=new StringBuilder();
sb.AppendLine("HTTP/1.0 200 OK");
//...etc
var headerBytes = Encoding.ASCII.GetBytes(sb.ToString());
Stream str = iGotTheStreamFromSomewhere;
str.Write(headerBytes,0,headerBytes.Length);
str.Write(ImgFile,0,ImgFile.Length);
あなたは[ディレクトリトラバーサル]から身を守るために必要があります( https://www.owasp.org/index.php/Path_Traversal)。 URLは '../../ something'であり、あなたのアプリは単にその中に入れます。 – spender
@spenderそこにありました;)これは、上記のコードよりも前のメインリクエストハンドラコードの間に他の場所で既に実装されています。 – DevelopedLogic
[StreamWriter.Write'](https://msdn.microsoft.com/en-us/library/system.io.streamwriter.write(v = vs.110).aspx)のオーバーロードにより、使っている? ;)私は 'byte []'のためのものを見ないので、おそらくオブジェクトを取るものです。 StreamWriterをフラッシュし、バイトを直接基になるストリームに書き込むほうが良いかもしれません。 – spender