Как обслуживать видеофайл/поток из минимального API ASP Net Core 6

Я пытался добиться этого, следуя различным учебникам, но не преуспел. Как мне обработать запрос диапазона http в минимальном API для обслуживания видеопотока?

У меня есть этот минимальный код настройки для API с одним сопоставленным путем GET "/video". Я также создал папку «wwwroot» внутри папки проекта. Я поместил туда видеофайл mp4 с именем «test.mp4». Может ли кто-нибудь знающий написать простой пример того, как передать этот файл внутри моего сопоставленного маршрута?

      var builder = WebApplication.CreateBuilder(args);
    
 builder.Services.AddEndpointsApiExplorer();
 builder.Services.AddSwaggerGen();
    
 var app = builder.Build();
    
 if (app.Environment.IsDevelopment())
 {
     builder.Logging.AddJsonConsole();
     app.UseSwagger();
     app.UseSwaggerUI();
 }
    
 app.UseHttpsRedirection();
    
 app.MapGet("/video", () =>
 {    
    
    
 });
    

1 ответ

Вы можете использоватьResults.Stream()метод для возврата потока из минимального API.

      string wwwroot = builder.Environment.WebRootPath;
...
app.MapGet("/video", () =>
{
    string filePath = Path.Combine(wwwroot, "test.mp4");
    return Results.Stream(new FileStream(filePath, FileMode.Open));
});

Параметр потока удаляется после отправки ответа.

Results.Streamпринимает несколько других необязательных параметров, таких как fileDownloadName, а также contentType(что по умолчанию "application/octet-stream"), которые могут быть вам полезны. Установлен enableRangeProcessing: trueчтобы включить запросы диапазона .

Вышеизложенное может быть легко адаптировано для filenameкак параметр, если хотите. Вам нужно будет рассмотреть возможность проверки (в равной степени относится к текущему коду TBH). Проверено и работает для меня.

Другие вопросы по тегам