0

背景- C# で HttpWebRequest/HttpWebResponse を使用して、既存の Web ページを別の Web アプリケーションにストリーミングしようとしています。私が印象的な問題の 1 つは、ファイル ダウンロードのコンテンツ長を使用してファイル アップロード リクエストのコンテンツ長を設定しようとしているということですが、ソース Web ページが HttpWebResponse がない Web サーバー上にある場合に問題が発生するようです。コンテンツの長さを提供します。

HttpWebRequest downloadRequest = WebRequest.Create(new Uri("downloaduri")) as HttpWebRequest;
 using (HttpWebResponse downloadResponse = downloadRequest.GetResponse() as HttpWebResponse)
 {
   var uploadRequest = (HttpWebRequest) WebRequest.Create(new Uri("uripath"));
   uploadRequest.Method = "POST";
   uploadRequest.ContentLength = downloadResponse.ContentLength;  // ####

質問: このケースに対応するために、このアプローチをどのように更新できますか (ダウンロード応答にコンテンツ長が設定されていない場合)。どうにかして MemoryStream を使用するのでしょうか? サンプルコードをいただければ幸いです。

4

1 に答える 1

1

他の Web サーバーからの応答を完全にダウンロードすることに満足している場合は、実際に作業が楽になります。最初の Web サーバーから取得するときに、MemoryStream に繰り返し書き込むだけで、2 番目の要求に設定する長さがわかり、データを簡単に書き込むことができます (特に、その内容を別のストリームに書き込む方法MemoryStreamがある場合)。WriteTo

これの欠点は、ファイルが大きい場合に多くのメモリを消費することです。それはあなたの状況で問題になる可能性がありますか?代替手段は次のとおりです。

  • を使用する代わりにファイルに書き込みますMemoryStream。もちろん、後でファイルをクリーンアップする必要があります-基本的にファイルシステムをより大きなメモリとして使用しています:)
  • チャンク転送エンコーディングを使用して「チャンクを読み取り、チャンクを書き込む」; これは正しく行うのが難しいかもしれません - それは確かに私が以前にやったことではありません.
于 2009-12-08T07:53:29.770 に答える