Поток большого файла через несколько слоев - PullRequest
0 голосов
/ 13 января 2020

Большой zip-файл (в гигабайтах) хранится в слое API. Когда пользователь нажимает кнопку загрузки в браузере, запрос проходит через веб-уровень до уровня API, а взамен нам необходимо передать большой файл с уровня API на веб-уровень обратно в браузер клиента.

Посоветуйте, пожалуйста, как можно ли передать большой файл из приложения API в веб-приложение клиенту, не записывая файл в веб-приложение?

Приложения API запроса веб-приложения, использующие библиотеку rest sharp, было бы здорово, если бы вы могли посоветовать решение с помощью rest острый (альтернативно нативный код). Оба проекта находятся в. NET ядро ​​2.2

Ответы [ 2 ]

0 голосов
/ 14 января 2020

Нашел решение, используя 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
};
0 голосов
/ 13 января 2020

Вы ищете DownloadData?

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

Ниже непосредственно из примера в документах :

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);
...