1

現在の http 要求に対する http 応答としてファイルをダウンロードする必要があります。

今まで私はコードを

System.Uri uri = System.Web.HttpContext.Current.Request.Url;   

HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(
    Path.Combine(uri.ToString(), filename));

httpRequest.Method = "GET";

using (HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse())
{                 
     using (Stream responseStream = httpResponse.GetResponseStream())
     {
         using (FileStream localFileStream = new FileStream(
             Path.Combine(localFolder, filename), FileMode.Open))
         {                  
             int bytesRead;

             while ((bytesRead = responseStream.Read(buffer, 0, buffer.Length)) > 0)
             {
                 totalBytesRead += bytesRead;    
                 localFileStream.Write(buffer, 0, bytesRead);
             }
         }
     }
}

しかし、このコードはリクエストを送信するだけで、応答を取得していません...

これは可能ですか?

4

2 に答える 2

2

ファイルをディスクから取り出してから、Response.OutputStreamを使用してファイルを応答に直接書き込む必要があります。ブラウザが何が来るかを認識できるように、正しいコンテンツヘッダーを設定してください。

FileInfo file = new FileInfo(Path.Combine(localFolder, filename));
int len = (int)file.Length, bytes;
Response.ContentType = "text/plain"; //Set the file type here
Response.AddHeader "Content-Disposition", "attachment;filename=" + filename; 
context.Response.AppendHeader("content-length", len.ToString());
byte[] buffer = new byte[1024];

using(Stream stream = File.OpenRead(path)) {
    while (len > 0 && (bytes =
        stream.Read(buffer, 0, buffer.Length)) > 0)
    {
        Response.OutputStream.Write(buffer, 0, bytes);
        len -= bytes;
    }
}
于 2012-10-11T16:30:30.820 に答える
0

確かではありませんが、Web リクエストを作成し、レスポンス ストリームを取得してから、localFolder にバッファリングしようとしているようです。その場合、FileMode.Open は疑わしいように見えます (「既存のファイルを開く必要があります...」)。多分 FileMode.Create を使用します。

MSDN リファレンス

また、Web アプリには localFolder への書き込み権限が必要ですか。

于 2012-10-11T16:01:32.537 に答える