我正在尝试将文件从我的机器发送到浏览器,以便可以在我正在处理的 .NET 应用程序中下载它。我正在使用此SO 答案中的代码,但我没有使用 HttpWebRequest,而是使用 FileWebRequest,因为我正在访问本地计算机上的文件。请求如下所示:
FileWebRequest fileReq = (FileWebRequest)WebRequest.Create(@"file:///C:/Tmp/new.html");
当我将 url 复制file:///C:/Tmp/new.html
到浏览器中时,它给了我正确的文件。但是当我fileReq.ContentLength
在我的代码中使用它时,它总是返回0
,这让我相信文件由于某种原因没有被读取。谁能告诉我这里发生了什么?
编辑:这是我的代码,就像我在另一个 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();
}
}