C# 正在下载图像-分块编码-服务器未发送零长度分块
我正在下载一个Tiff文件,并使用下面的代码将其保存到本地临时目录。使用分块编码发送文件。文件已下载并写入,但我的应用程序一直运行,直到引发异常:C# 正在下载图像-分块编码-服务器未发送零长度分块,c#,asp.net,.net,httpwebrequest,C#,Asp.net,.net,Httpwebrequest,我正在下载一个Tiff文件,并使用下面的代码将其保存到本地临时目录。使用分块编码发送文件。文件已下载并写入,但我的应用程序一直运行,直到引发异常:无法从传输连接读取数据:连接已关闭。 使用Fiddler,我发现服务器没有发送长度为零的数据块,而是关闭了连接。如何检测何时到达文件结尾并结束程序 CookieContainer cookieJar = new CookieContainer(); HttpWebRequest request = (HttpWebRe
无法从传输连接读取数据:连接已关闭。
使用Fiddler,我发现服务器没有发送长度为零的数据块,而是关闭了连接。如何检测何时到达文件结尾并结束程序
CookieContainer cookieJar = new CookieContainer();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(fileUrl.AbsoluteUri);
request.Credentials = CredentialCache.DefaultCredentials;
request.PreAuthenticate = true;
request.CookieContainer = cookieJar;
request.AllowWriteStreamBuffering = true;
request.Timeout = 10000;
using (HttpWebResponse httpResponse = (HttpWebResponse)request.GetResponse())
{
byte[] buffer = new byte[32768];
using (Stream input = httpResponse.GetResponseStream())
{
using (FileStream fs = new FileStream(tempPath + "test_name.tif", FileMode.Create, FileAccess.Write))
{
int bytesRead;
while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
{
fs.Write(buffer, 0, bytesRead);
}
}
}
}
上面的代码似乎可以很好地处理我测试的几个图像。您确定不是后来的某个代码导致了错误吗?代码到此结束。在我的例子中,我还成功地下载了该文件。但是程序只是在while循环中运行,直到抛出异常为止。我的几个测试都成功退出了循环。这会发生在您尝试检索的每个图像上,还是仅从一个站点检索图像?特定站点。我认为服务器没有发送长度为零的数据块来表示传输结束,这是一个问题。通过观察Fiddler,我可以看到响应结束,但是如果没有最后一块,代码永远不会知道它。记录循环中发生的事情可能很有用。您还可以添加一些代码来检查循环中的httpResponse状态,并在必要时使用该状态退出。