我試圖從我的機器發送一個文件到瀏覽器,以便它可以在我正在處理的.NET應用程序中下載。我正在使用this SO答案中的代碼,但使用FileWebRequest而不是使用HttpWebRequest,因爲我正在訪問本地計算機上的文件。請求如下所示: FileWebRequest fileReq = (FileWebRequest)WebRequest.Create(@"file:///C:/Tmp/new.html");
當我將url file:///C:/Tmp/new.html
複製到瀏覽器中時,它會給我正確的文件。但是當我在我的代碼中使用fileReq.ContentLength
時,它總是返回0
,這導致我相信該文件由於某種原因而未被讀取。誰能告訴我這裏發生了什麼?FileWebRequest不返回它應該的內容
編輯:這裏是我的代碼,就像我從另一個SO問題完全一樣,但我用FileWebRequest而不是HttpWebRequest。
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();
}
}
提供您寫下的實際代碼。 –
爲什麼你不打開文件並將其提供給響應?爲什麼用請求/響應對「打開」它?你有沒有考慮過Response.TransmitFile? – Alexander
@Alexander這聽起來像我想要做的,你能否詳細說明如何做到這一點? – azrosen92