2

ファイルのアップロードを含むブラウザからの POST を受け入れる小さなクラスがあります。私は StreamReader を使用してそれを読み取ります。ヘッダーを読み取り、本文に到達したら、コンテンツの長さを取得し、そのサイズの配列を作成してから、次のようstream.ReadBlock()にします。

char[] buffer = new char[contentLength];
stream.ReadBlock(buffer, 0, contentLength);
String body = new string(buffer);

これを実行してテキスト ファイルを POST すると、正常に動作します。ただし、ZIP ファイルと MP3 ファイルの両方を試しましたが、どちらも機能しません。stream.ReadBlock()通話中にハングアップするだけです。

Mono 2.6.7を搭載したUbuntu 10.04でこれを最初に試しました(私のMonoDevelopプロジェクトは.net 3.5を使用するように設定されています)。そして、VisualStudio 2010 と .net 3.5 で同じプロジェクトを実行して、Windows7 でも同じことが起こることを確認しました。Firefox と Chrome の両方から投稿してみました。

なぜこれが起こるのか、誰にも手がかりがありますか?ありがとう。

また、StreamReader の代わりに BinaryReader を使用してみました。

byte[] bytes = reader.ReadBytes(contentLength);

しかし、今何があってもその通話にハングアップしてしまいます。StreamReader を使用して POST のヘッダーを読み取り、次に BinaryReader を使用して本文を読み取るためですか?

4

2 に答える 2

4

StreamReaderテキストデータ用です。バイナリ データでは使用しないでください。BinaryReaderまたはStream.

于 2010-08-18T20:04:15.013 に答える
1

StreamReader の使用は、バイナリ ファイルには適していません。それはあらゆる種類のテキストエンコーディングを行い、一般的に(潜在的に)物事を台無しにします。

作業しているファイルがバイナリであると判断したら、Stream オブジェクトを直接使用してファイル (の一部) を読み取る必要があります。そうすれば、コンテンツを台無しにするエンコーディングに対処する必要がなくなります。

于 2010-08-18T20:05:12.050 に答える