WebClient 类是用于简化场景的类。一旦您通过了简单的场景(并且您已经完成了),您将不得不退后一点并使用 WebRequest。
使用 WebRequest,您可以访问响应流,并且可以循环访问它,读取一点并写入一点,直到完成。
从微软文档:
我们不建议您使用 WebRequest 或其派生类进行新开发。而是使用System.Net.Http.HttpClient类。
来源:docs.microsoft.com/WebRequest
例子:
public void MyDownloadFile(Uri url, string outputFilePath)
{
const int BUFFER_SIZE = 16 * 1024;
using (var outputFileStream = File.Create(outputFilePath, BUFFER_SIZE))
{
var req = WebRequest.Create(url);
using (var response = req.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
var buffer = new byte[BUFFER_SIZE];
int bytesRead;
do
{
bytesRead = responseStream.Read(buffer, 0, BUFFER_SIZE);
outputFileStream.Write(buffer, 0, bytesRead);
} while (bytesRead > 0);
}
}
}
}
请注意,如果 WebClient.DownloadFile 有效,那么我将其称为最佳解决方案。我在发布“DownloadFile”答案之前写了上面的内容。我也写得太早了,所以可能需要一粒盐(和测试)。