作業中の .NET アプリケーションでファイルをダウンロードできるように、マシンからブラウザにファイルを送信しようとしています。このSO 回答のコードを使用していますが、ローカル マシン上のファイルにアクセスしているため、HttpWebRequest を使用する代わりに FileWebRequest を使用しています。リクエストは次のよう
FileWebRequest fileReq = (FileWebRequest)WebRequest.Create(@"file:///C:/Tmp/new.html");
になります。URL をブラウザにコピーするとfile:///C:/Tmp/new.html
、正しいファイルが表示されます。しかしfileReq.ContentLength
、コードで使用すると常に が返さ0
れるため、何らかの理由でファイルが読み取られていないと思われます。ここで何が起こっているのか誰か教えてもらえますか?
編集:これが私のコードです。他のSOの質問とまったく同じように言ったのですが、HttpWebRequestの代わりにFileWebRequestを使用しました。
Stream stream = null;
int bytesToRead = 10000;
byte[] buffer = new Byte[bytesToRead];
try
{
FileWebRequest fileReq = (FileWebRequest)WebRequest.Create(@"file:///C:/Tmp/new.html");
FileWebResponse fileResp = (FileWebResponse)fileReq.GetResponse();
if (fileReq.ContentLength > 0)
{
fileResp.ContentLength = fileReq.ContentLength;
stream = fileResp.GetResponseStream();
var resp = HttpContext.Current.Response;
resp.ContentType = "application/octet-stream";
resp.AddHeader("Content-dsiposition", "attachment; filename=" + url);
resp.AddHeader("Content-Length", fileResp.ContentLength.ToString());
int length;
do
{
if (resp.IsClientConnected)
{
length = stream.Read(buffer, 0, bytesToRead);
resp.OutputStream.Write(buffer, 0, length);
resp.Flush();
buffer = new Byte[bytesToRead];
}
else
{
length = -1;
}
} while (length > 0);
}
}
catch (Exception ex)
{
FileLabel.Text = ex.Message.ToString();
}
finally
{
if (stream != null)
{
stream.Close();
}
}