跨多个层流式传输大文件

Streaming large file across multiple layers

大型 zip 文件(以千兆字节为单位)存储在 API 层中。当用户单击浏览器中的下载按钮时,请求通过 WEB 层到达 API 层,在 return 中,我们需要将大文件从 API 层流式传输到 WEB 层返回到客户端浏览器。

请指教如何将大文件从 API 应用程序流式传输到 WEB 应用程序再到客户端,而无需在 Web 应用程序中写入文件?

Web 应用程序请求 API 使用 rest sharp 库的应用程序,如果您可以建议使用 rest sharp(或者本机代码)的解决方案,那就太好了。这两个项目都在 .NET core 2.2

您在寻找 DownloadData 吗?

https://github.com/restsharp/RestSharp/blob/master/src/RestSharp/RestClient.Sync.cs#L23

以下直接来自docs中的例子:

var tempFile = Path.GetTempFileName();
using var writer = File.OpenWrite(tempFile);

var client = new RestClient(baseUrl);
var request = new RestRequest("Assets/LargeFile.7z");
request.ResponseWriter = responseStream =>
{
    using (responseStream)
    {
        responseStream.CopyTo(writer);
    }
};
var response = client.DownloadData(request);

找到了使用 HttpClient 而不是 RestSharp 库将内容直接下载到浏览器的解决方案

代码片段如下

HttpClient client = new HttpClient();
var fileName = Path.GetFileName(filePath);
var fileDowloadURL = $"API URL";

var stream = await client.GetStreamAsync(fileDowloadURL).ConfigureAwait(false);
// note that at this point stream only contains the header the body content is not read

return new FileStreamResult(stream, "application/octet-stream")
{
    FileDownloadName = fileName
};