2012-04-18 16 views
2

私が作業しているプロジェクトでは、私はftpアクセスしかないファイルへのhttpアクセスを提供する必要があります。これは、ファイルをダウンロードする必要があるがhttpのみをサポートする外部サービスで使用されます。私はこのコードを試しました:しかし、CPU /メモリの使用量は屋根を通過してゆっくりと消えます。助言がありますか?単純なftpダウンローダー/ httpプロキシ

using System; 
using System.Web; 
using System.Net; 
using System.IO; 

public class ftpproxy : IHttpHandler 
{ 
    // ftpproxy.ashx?src=ftp://username:[email protected]/staticfiles/foo.f4v 
    public void ProcessRequest (HttpContext context) { 
     WebClient wc = new WebClient(); 
     string src = context.Request.QueryString["src"]; 
     using (Stream instr = wc.OpenRead(src)) 
     { 
      instr.CopyTo(context.Response.OutputStream); 
     } 
    } 

    public bool IsReusable { 
     get { 
      return false; 
     } 
    } 

} 

ありがとうございます!

ああ、これらはあなたが何ができるか、大きなファイル(カップルのギグにメガ数百もの)

+0

「WebClient」を使用ブロックにラップしてみましたか? –

+0

また、あなたのコードが現在どのように動作しているのか、私はそれがメモリにすべてロードされ、メモリからディスクに書き込まれると考えています。メモリの負荷を軽減したい場合は、ディスクに書き込む必要があります。 – Origin

+0

私は、入力ストリームから、出力ストリームに、 'CopyTo'がデフォルトで使用する4Kバッファを使って直接コピーする方法があることを期待していました。 –

答えて

0

あるがレスポンスからWebクライアントエンドのWriteFileからメソッドをDownloadFile使用しています。

string src = context.Request.QueryString["src"]; 
var file = "X:\TEMP\TempFile..."; 
WebClient client = new WebClient(); 
client.DownloadFile(src, file); 

Context.Response.WriteFile(file); 

//Write code to clean File; 
+0

お返事ありがとうございます!大量のファイルがたくさんあり、処理中にWebサーバーのストレージを枯渇させるため(一度に最大100GBまで)、ファイルにストリーミングしてからレスポンスにストリーミングしたくありません。私はそれを出力ストリームにストリームして、メモリを解放することを望んでいました。 –

+0

代わりにサーバーメモリを使いたいですか?申し訳ありませんが、ダウンロードをコンテキストレスポンスに直接ストリームする方法はわかりません。 – amaters

関連する問題