如何在 .NET Core 中逐行下载文件?
How can I download file line by line in .NET core?
我曾尝试使用 HttpWebResponse.GetResponse();
,但这不是 .NET 核心的一部分,我想不出其他任何东西。
到目前为止我只有这个,但是这会下载整个文件
string first_line(string url)
{
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("MyClient", "1.0"));
var otp = httpClient.GetStringAsync(url);
return imaginary_first_line;
}
我想只下载文件的第一行而不下载文件的其余部分。
解决方法是使用范围header。它说我们只对文件的一部分感兴趣的服务器。下面是一个例子,其中只下载了 50 个字节:
using (var client = new HttpClient())
{
var request = new HttpRequestMessage(HttpMethod.Get, url);
//Let's read only 50 bytes
request.Headers.Range = new RangeHeaderValue(0, 50);
using (var response = await client.SendAsync(request))
using (var stream= await response.Content.ReadAsStreamAsync())
{
//The buffer can store 1000 bytes but only 50 will be send from the server
var buffer = new byte[1000];
stream.Read(buffer, 0, 1000);
//...
}
}
您可以使用 Fiddler 检查服务器是否确实 returns 只有 50 个字节。
您还可以通过以下方式使用HttpWebRequest class:
var request = (HttpWebRequest)WebRequest.Create(url);
request.Headers[HttpRequestHeader.Range] = "bytes=0-50";
var response = await request.GetResponseAsync();
//...
结果应该是一样的。
我曾尝试使用 HttpWebResponse.GetResponse();
,但这不是 .NET 核心的一部分,我想不出其他任何东西。
到目前为止我只有这个,但是这会下载整个文件
string first_line(string url)
{
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("MyClient", "1.0"));
var otp = httpClient.GetStringAsync(url);
return imaginary_first_line;
}
我想只下载文件的第一行而不下载文件的其余部分。
解决方法是使用范围header。它说我们只对文件的一部分感兴趣的服务器。下面是一个例子,其中只下载了 50 个字节:
using (var client = new HttpClient())
{
var request = new HttpRequestMessage(HttpMethod.Get, url);
//Let's read only 50 bytes
request.Headers.Range = new RangeHeaderValue(0, 50);
using (var response = await client.SendAsync(request))
using (var stream= await response.Content.ReadAsStreamAsync())
{
//The buffer can store 1000 bytes but only 50 will be send from the server
var buffer = new byte[1000];
stream.Read(buffer, 0, 1000);
//...
}
}
您可以使用 Fiddler 检查服务器是否确实 returns 只有 50 个字节。
您还可以通过以下方式使用HttpWebRequest class:
var request = (HttpWebRequest)WebRequest.Create(url);
request.Headers[HttpRequestHeader.Range] = "bytes=0-50";
var response = await request.GetResponseAsync();
//...
结果应该是一样的。