2017-10-24 25 views
1

HTML/CSS/JSのカスタマイズテーマを持つHTTP File Serverのようなアプリケーションを作成しています。ダウンロードマネージャのほとんどがサーバーに接続しているため、複数の部分でファイルを処理したいと考えています。複数の接続を使用してファイルを8個のファイルとしてダウンロードすると、その機能により最終的にダウンロード速度が向上し、ダウンロードを再開して一時停止することができます。C#HttpListener部分コンテンツ

HTTP's Partial Contentがこれを可能にすることを知っていれば、私はウェブを見渡しましたが、私のコードでどのように実装するのがよい例が見つからないのですか?HttpListenerをウェブページとファイルに使用します。

誰かが代わりにTcpListenerを使用するように提案しましたが、私のアプリ全体はHttpListenerで動作し、実際にはTcpListenerで部分的なコンテンツの良い例は見つかりませんでした。

ウェブサーバーはマルチスレッドであり、異なる接続を介して同時に多くの要求を処理する際に問題はありません。 しかし、いつでも私は、単一の接続とIDMは、サーバーが"206"HTTP Partial Content)を提供することができないことを示しているものの、それだけでコンテンツを提供していますIDMを持つ巨大なファイルをダウンロードし

ここで私は現在、提供するために使用しているコードですファイル:

context.Response.ContentType = GetMeme(filename); 

Stream input = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
context.Response.ContentLength64 = input.Length; 

byte[] buffer = new byte[1024 * 16]; 
int nbytes; 
while ((nbytes = input.Read(buffer, 0, buffer.Length)) > 0) 
context.Response.OutputStream.Write(buffer, 0, nbytes); 
input.Close(); 

context.Response.StatusCode = (int)HttpStatusCode.OK; 
context.Response.OutputStream.Flush(); 
context.Response.OutputStream.Close(); 

私は、HTTPヘッドからのオフセットバッファを取得しようとしましたが、それはオフセットによるにストリームを閉じるために失敗し、Cannot close stream until all bytes are written.

は、任意のより良い代替手段があると言いますか? HttpListenerでもHTTP:206を正しく処理できますか? 部分コンテンツはTcpListenerでどのように動作しますか?

有用なリンクや情報があれば教えてください。

答えて

0

免責事項:この回答は完全なものではありません。この文脈で話すのは非常に多くのことです。しかし始まりとして...

あなたが使用するリスナーは、それとは関係ありません。コードでは、RANGE HTTPヘッダーを認識している必要があります。 RANGEが指定されている場合は、このヘッダ+送信206で指定されたとおりにファイルを読み込んで提供します。それ以外の場合は、ファイル全体を配信して200を送信します。

これはバッファオフセットではありません。

最初の応答コードとその他のメタデータ(ヘッダー)を設定し、最後のステップとしてストリームに書き込みます。

実際にファイルを提供する方法を完全に変更する必要があります。たとえば、FileStreamのCopyToAsync()を呼び出します。

ではありません。MIMEです。

+0

ありがとうございました。完全なフィードバックを投稿してみようとしています。私はそれがMIMEであることを知っています。時にはメソッドとvarsの面白い名前を使っています:)) –

関連する問題