如何在返回
HttpClient
之前检索我使用
fileStreamResult
获取的文件的大小
public async Task<FileStreamResult> Index(string id)
{
var urlToDownloadFromService= _upDownService.Downloadables.Find(d => d.Name == id);
HttpClient client = new HttpClient();
Stream stream = await client.GetStreamAsync(new Uri(urlToDownloadFromService.UrlSource));
var fileStreamResult = new FileStreamResult(stream, "application/octet-stream");
return fileStreamResult;
}
stream.Length
不起作用,因为 ContentLengthReadStream
没有实现该方法
更新
在 dotnetcore 框架中,
HttpConnection
的实现从 response
对象中获取长度信息,如下所示
else if (response.Content.Headers.ContentLength != null)
{
long contentLength = Response.Content.Headers.ContentLength.GetValueOrDefault();
.
.
.
.
responseStream = new ContentLengthReadStream(this, (ulong)contentLength);
HttpClient.GetStreamAsync()
方法不支持HTTP Content-Length
,由HTTP服务器报告为HTTP协议的标头。
所以,你无法通过
HttpClient.GetStreamAsync()
获取文件大小。
我建议使用
HttpClient.GetAsync()
方法。结果是HttpResponseMessage
。
在获取流之前,您可以使用
HttpResponseMessage.Content.Headers.ContentLength
获取文件大小。
但并非每个 HTTP 服务器都会报告 HTTP
Content-Length
。所以也许,这个值是 0
而不是文件大小;
直播,你可以通过
HttpResponseMessage.Content.ReadAsStream()
获得。