asp.net 6下载文件通过httpclient -问题与流



我正在创建blazor服务器应用程序。我使用RestAPI的外部文件存储。我想创建下载按钮从存储中获取文件。这似乎很容易,但不一定。

从文件存储中下载HttpContent,就像这样

var request = new HttpRequestMessage(HttpMethod.Get, _url);
request.Headers.Add("auth-token", token);
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/octet-stream"));
HttpResponseMessage response = await _Http.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
response.EnsureSuccessStatusCode();
var content = response.Content;

接下来我像这个教程一样https://learn.microsoft.com/en-us/aspnet/core/blazor/file-downloads?view=aspnetcore-6.0

var fileStream = content.ReadAsStream();
using (var streamRef = new DotNetStreamReference(fileStream))
{
await JS.InvokeVoidAsync("downloadFileFromStream", "file.txt", streamRef);
}  

对于小文件,一切都很好。但是,如果我尝试下载大文件(100mb),算法首先将文件下载到服务器的内存(RAM),然后保存到客户端的本地磁盘。

在理想的世界里,我梦想当我点击按钮下载,文件从外部存储将下载后延迟(与进度条)像物理文件(没有流缓冲区)形式的http服务器,例如https://www.example.com/file.txt。当然是由我的BlazorServer应用程序与授权和身份验证,以及整个必要的服务。

我有办法了

  1. 创建服务来服务文件存储API
  2. 创建控制器以避免跨原点错误
  3. 使用微软教程创建下载按钮https://learn.microsoft.com/en-us/aspnet/core/blazor/file-downloads?view=aspnetcore-6.0

最新更新