画像を受け入れるhttpサーバーを作成しようとしています。この方法で、txtファイルまたは単純なテキストを転送することができました。ただし、jpegファイルの場合、転送されたファイルにはアクセスできなくなります。
クライアント側:
WebRequest request = WebRequest.Create("http://localhost:8080");
request.Method = "POST";
byte[] byteArray = System.IO.File.ReadAllBytes(path);
request.ContentType = "image/jpeg";
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
サーバ側:
HttpListenerContext context = listener.GetContext();
HttpListenerRequest request = context.Request;
StreamReader reader = new StreamReader(request.InputStream,request.ContentEncoding);
Console.WriteLine("Client data content type {0}", request.ContentType);
String Data = reader.ReadToEnd();
byte[] imagebuffer = System.Text.Encoding.UTF8.GetBytes(Data);
System.IO.File.WriteAllBytes(path, imagebuffer);
.txtファイルでこれを試してみると、両側のバイト配列の長さが変わらず、サーバー側のファイルが読み取り可能です。ただし、jpgの場合、配列の長さは異なります。これが問題の原因だと思います。これを回避するにはどうすればよいですか?または代替手段はありますか?
編集:「StreamReader」を「BinaryReader」に置き換え、正常に動作するようになりました。のように見えます。
BinaryReader reader = new BinaryReader(request.InputStream, request.ContentEncoding);
byte[] imagebuffer = reader.ReadBytes((int)request.ContentLength64);
System.IO.File.WriteAllBytes(path, imagebuffer);